AtCoder Beginner Contest 080を解きました
AtCoder Beginner Contest 080を解きました
いうてもD問題がまだ解けない
==
A問題
A: Parking - AtCoder Beginner Contest 080 | AtCoder
#include<stdio.h> int main() { int res,N,A,B,p1,p2; scanf("%d %d %d",&N,&A,&B); p1 = A * N; p2 = B; res = p1 > p2 ? p2 : p1; printf("%d\n",res); return 0; }
printf("%d\n", A*N > B ? B : A*N)
でよかったかも
B問題
B: Harshad Number - AtCoder Beginner Contest 080 | AtCoder
#include<stdio.h> int digitsum(int N) { if(N == 0) return 0; else return ((N % 10) + digitsum(N / 10)); } int hjd(int N) { if(N % digitsum(N) == 0) return 1; else return 0; } int main() { int N; scanf("%d",&N); switch(hjd(N)){ case 0 : printf("No\n"); break; case 1 : printf("Yes\n"); break; default : printf("Error\n"); break; } return 0; }
関数作りすぎたかも
C問題
C: Shopping Street - AtCoder Beginner Contest 080 | AtCoder
#include<stdio.h> int N,F[101][6][3],P[101][11]; int max(int x, int y) { return x > y ? x : y; } int daynum(int n,int day[11]) { int i,j,res=0; for(i=1;i<=5;i++) for(j=1;j<=2;j++) res += day[2*(i-1)+j]*F[n][i][j]; return res; } int isZero(int day[11]) { int i; for(i=1;i<=10;i++) if(day[i] != 0) return 0; return 1; } int rieki(int day[11],int date){ if(date == 11){ int n,res=0; if(isZero(day)) return -2000000000; for(n=1;n<=N;n++) res += P[n][daynum(n,day)]; return res; }else{ int i,d1[11],d2[11]; for(i=1;i<=10;i++) d1[i] = d2[i] = day[i]; d1[date] = 1; d2[date] = 0; return max(rieki(d1,date+1),rieki(d2,date+1)); } } int main() { int day[11],i,j,k,res; scanf("%d",&N); for(i=1;i<=N;i++) for(j=1;j<=5;j++) for(k=1;k<=2;k++) scanf("%d",&F[i][j][k]); for(i=1;i<=N;i++) for(j=0;j<=10;j++) scanf("%d",&P[i][j]); for(i=0;i<=10;i++) day[i] = 0; printf("%d\n",rieki(day,1)); return 0; }
関数めちゃくちゃ作りすぎました。
長々と書いてますがやってることは1024通りのパターンを潰しているだけです。一日も営業しない日を潰さなくてはいけないので、day配列がすべて0のときだけありったけの小さい数を返すようにしました。
D問題ができたらまた書きます。
Haskellでフィボナッチメモ化再帰
さっき挙げたプログラムだとfib(40)ぐらいでもう数十秒ぐらいかかり、だいぶ遅いです。
メモ化再帰フィボナッチをメモしておきます
fib 0 = 0 fib 1 = 1 fib x = (fiblist !! (x-1) + fiblist !! (x-2)) fiblist = [fib x | x <- [0,1..]]
実行結果
ghci> fib 5000 3878968454388325633701916308325905312082127714646245106160597214895550139044037097010822916462210669479293452858882973813483102008954982940361430156911478938364216563944106910214505634133706558656238254656700712525929903854933813928836378347518908762970712033337052923107693008518093849801803847813996748881765554653788291644268912980384613778969021502293082475666346224923071883324803280375039130352903304505842701147635242270210934637699104006714174883298422891491273104054328753298044273676822977244987749874555691907703880637046832794811358973739993110106219308149018570815397854379195305617510761053075688783766033667355445258844886241619210553457493675897849027988234351023599844663934853256411952221859563060475364645470760330902420806382584929156452876291575759142343809142302917491088984155209854432486594079793571316841692868039545309545388698114665082066862897420639323438488465240988742395873801976993820317174208932265468879364002630797780058759129671389634214252579116872755600360311370547754724604639987588046985178408674382863125
5000項目でも一瞬で計算できます。多倍長標準実装スゴイ。
いろいろ買い物&スタジオ作りました
今日は街に行ってフィギュアの撮影スタジオの材料とかを買いに行きました。
ついでに夏休みに使う予定の青春18きっぷも買っておきました!!たのしみです
東急ハンズで買い物しましたが、いろいろなものがあって目移りしましたね。
理化学コーナーにビーカーやらいろいろな実験用具が売っていて、専攻は違えどなかなかわくわくしました。
結局あまり買わなかったんですけどまた行きたいです。
さらに大きい書店に寄ってコンピュータの棚をみてると、関数型言語Haskellの参考書『すごいHaskellたのしく学ぼう!』、
(通称すごいH本)が売っていたのでなかなか値は張りましたが買ってしまいました。関数型言語はまだ触れたことがないので楽しみです。
うちに帰ったら早速スタジオを作りました。
ダンボールの床と壁に白い紙を貼り、上からUSB給電のLED光源で照らすだけの簡素なものです。
ダンボールの切り出しに苦戦しつつも完成しました。(わりとでかい
↓こんな漢字
↓こんな漢字
上から照らしてるだけなので正面からも照らしたいんですが、直接当てると影がなかなか目立ちます。
角のほうの影もちょっと問題なのでそのへんを直していきたいです