結果
問題 | No.5003 物理好きクリッカー |
ユーザー | butsurizuki |
提出日時 | 2018-12-25 02:14:58 |
言語 | C (gcc 12.3.0) |
結果 |
AC
|
実行時間 | 9,316 ms / 10,000 ms |
コード長 | 4,617 bytes |
コンパイル時間 | 182 ms |
実行使用メモリ | 21,948 KB |
スコア | 32,208,293,779 |
平均クエリ数 | 10000.00 |
最終ジャッジ日時 | 2021-07-19 09:40:15 |
合計ジャッジ時間 | 310,131 ms |
ジャッジサーバーID (参考情報) |
judge11 / judge12 |
純コード判定しない問題か言語 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 9,308 ms
21,540 KB |
testcase_01 | AC | 9,316 ms
21,516 KB |
testcase_02 | AC | 9,298 ms
21,372 KB |
testcase_03 | AC | 9,304 ms
21,840 KB |
testcase_04 | AC | 9,305 ms
21,348 KB |
testcase_05 | AC | 9,313 ms
21,516 KB |
testcase_06 | AC | 9,306 ms
21,876 KB |
testcase_07 | AC | 9,306 ms
21,888 KB |
testcase_08 | AC | 9,305 ms
21,540 KB |
testcase_09 | AC | 9,303 ms
21,684 KB |
testcase_10 | AC | 9,301 ms
21,840 KB |
testcase_11 | AC | 9,300 ms
21,876 KB |
testcase_12 | AC | 9,308 ms
21,348 KB |
testcase_13 | AC | 9,303 ms
21,864 KB |
testcase_14 | AC | 9,306 ms
21,888 KB |
testcase_15 | AC | 9,307 ms
21,360 KB |
testcase_16 | AC | 9,309 ms
21,852 KB |
testcase_17 | AC | 9,301 ms
21,840 KB |
testcase_18 | AC | 9,306 ms
21,372 KB |
testcase_19 | AC | 9,302 ms
21,540 KB |
testcase_20 | AC | 9,316 ms
21,528 KB |
testcase_21 | AC | 9,304 ms
21,792 KB |
testcase_22 | AC | 9,305 ms
21,864 KB |
testcase_23 | AC | 9,304 ms
21,528 KB |
testcase_24 | AC | 9,297 ms
21,528 KB |
testcase_25 | AC | 9,302 ms
21,864 KB |
testcase_26 | AC | 9,305 ms
21,684 KB |
testcase_27 | AC | 9,303 ms
21,684 KB |
testcase_28 | AC | 9,301 ms
21,336 KB |
testcase_29 | AC | 9,314 ms
21,360 KB |
testcase_30 | AC | 9,303 ms
21,360 KB |
testcase_31 | AC | 9,301 ms
21,864 KB |
ソースコード
#include<stdio.h> #include<string.h> #include<sys/time.h> #define llinf 4154118101919364364 unsigned long long seed; unsigned long long xorshift(){ seed=seed^(seed<<13); seed=seed^(seed>>7); seed=seed^(seed<<17); return seed; } long long llceil(long long a,long long b){if(a%b==0){return a/b;}return (a/b)+1;} char s[524288]; char move[8][16]={ "click", "buy", "sell", "reinforce", "enhclick", "nothing" }; char namebuild[8][16]={ "#", "hand", "lily", "factory", "casino", "grimoire" }; long long bvaluebuild[8]={ 0, 150, 2000, 30000, 600000, 10000000 }; long long tvaluebuild[8][512]={0}; long long ismove(char str[]){ long long i; for(i=0;i<=5;i++){ if(strcmp(move[i],str)==0){ return i; } } return -1; } long long isbuild(char str[]){ long long i; for(i=1;i<=5;i++){ if(strcmp(namebuild[i],str)==0){ return i; } } return -1; } void calcvbuild(){ long long i,j,w; for(i=1;i<8;i++){ for(j=1;j<512;j++){ tvaluebuild[i][j]=llinf; } tvaluebuild[i][1]=bvaluebuild[i]; for(j=2;j<512;j++){ w=llceil(6*tvaluebuild[i][j-1],5); if(w>1000000000000000000){ break; } tvaluebuild[i][j]=w; } } } long long eval(char cmd[10005][16],char inbuild[10005][16]){ long long i,j,n=10000,r=0,ft=0,k=1,sf=0,id,ks,bp; long long madebuild[8]={ 1, 1, 10, 120, 2000, 25000 }; long long enhbuild[8]={ 15, 1500, 20000, 300000, 6000000, 100000000 }; long long buildown[8]={ 0, 0, 0, 0, 0, 0 }; for(i=0;i<n;i++){ if(ft==0){k=1;}else{k=7;} if(strcmp(cmd[i],move[0])==0){ r+=(madebuild[0]*k); } else if(strcmp(cmd[i],move[1])==0){ id=isbuild(inbuild[i]); if(id==-1){ } else{ bp=tvaluebuild[id][buildown[id]+1]; if(sf==1){ bp=llceil(bp*9,10); } if(r<bp){ } else{ r-=bp; buildown[id]++; } } } else if(strcmp(cmd[i],move[2])==0){ id=isbuild(inbuild[i]); if(id==-1){ } else if(buildown[id]==0){ } else{ bp=tvaluebuild[id][buildown[id]]; bp=llceil(bp,4); r+=bp; buildown[id]--; } } else if(strcmp(cmd[i],move[3])==0){ id=isbuild(inbuild[i]); if(id==-1){ } else if(buildown[id]==0){ } else{ ks=enhbuild[id]; if(sf==1){ ks=llceil(9*ks,10); } if(r>=ks){ r-=ks; madebuild[id]*=2; enhbuild[id]*=10; } else{ } } } else if(strcmp(cmd[i],move[4])==0){ ks=enhbuild[0]; if(sf==1){ ks=llceil(9*ks,10); } if(r>=ks){ r-=ks; madebuild[0]*=2; enhbuild[0]*=10; } else{ } } else if(strcmp(cmd[i],move[5])==0){ } else{ } for(j=1;j<=5;j++){ r+=(madebuild[j]*buildown[j]*k); } if(ft>0){ft--;} sf=0; if(s[i]=='B'){ r+=llceil(r,100); } else if(s[i]=='F'){ ft=20; } else if(s[i]=='S'){ sf=1; } } return r; } int main(void){ long stt,nt; calcvbuild(); struct timeval tv; gettimeofday(&tv, NULL); seed=(tv.tv_sec*1000000+tv.tv_usec); stt=seed; long long i,j,n,m,k,a,b,c,h,w,r=0,l,t; char dum[16]; char cmd[10005][16]={0}; char bcmd[10005][16]={0}; char inbuild[10005][16]={0}; char binbuild[10005][16]={0}; scanf("%lld%s",&n,s); while(1){ for(i=0;i<16;i++){ if(i==15){ strcpy(cmd[i],"enhclick"); } else{strcpy(cmd[i],"click");} } for(i=16;i<n;i++){ if(xorshift()%25==0){ a=(xorshift()%3); a++; if(a>1){a++;} strcpy(cmd[i],move[a]); if(a!=4){ a=xorshift()%5; a++; strcpy(inbuild[i],namebuild[a]); } } else{strcpy(cmd[i],"click");} } w=eval(cmd,inbuild); if(r<w){ r=w; for(i=0;i<n;i++){ strcpy(bcmd[i],cmd[i]); strcpy(binbuild[i],inbuild[i]); } } gettimeofday(&tv, NULL); nt=(tv.tv_sec*1000000+tv.tv_usec); if(nt-stt>9000000){break;} } for(i=0;i<n;i++){ printf("%s",bcmd[i]); w=ismove(bcmd[i]); if(1<=w && w<=3){ printf(" %s",binbuild[i]); } printf("\n"); fflush(stdout); scanf("%s",dum); } return 0; }