結果
問題 | No.5003 物理好きクリッカー |
ユーザー | butsurizuki |
提出日時 | 2018-12-25 21:52:31 |
言語 | C (gcc 12.3.0) |
結果 |
AC
|
実行時間 | 9,309 ms / 10,000 ms |
コード長 | 5,311 bytes |
コンパイル時間 | 221 ms |
実行使用メモリ | 21,996 KB |
スコア | 124,390,969,623 |
平均クエリ数 | 10000.00 |
最終ジャッジ日時 | 2021-07-19 10:01:08 |
合計ジャッジ時間 | 309,877 ms |
ジャッジサーバーID (参考情報) |
judge11 / judge12 |
純コード判定しない問題か言語 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 9,297 ms
21,864 KB |
testcase_01 | AC | 9,300 ms
21,372 KB |
testcase_02 | AC | 9,295 ms
21,696 KB |
testcase_03 | AC | 9,296 ms
21,900 KB |
testcase_04 | AC | 9,290 ms
21,372 KB |
testcase_05 | AC | 9,308 ms
21,564 KB |
testcase_06 | AC | 9,296 ms
21,900 KB |
testcase_07 | AC | 9,309 ms
21,528 KB |
testcase_08 | AC | 9,308 ms
21,852 KB |
testcase_09 | AC | 9,301 ms
21,504 KB |
testcase_10 | AC | 9,301 ms
21,852 KB |
testcase_11 | AC | 9,296 ms
21,360 KB |
testcase_12 | AC | 9,292 ms
21,864 KB |
testcase_13 | AC | 9,296 ms
21,732 KB |
testcase_14 | AC | 9,291 ms
21,360 KB |
testcase_15 | AC | 9,291 ms
21,852 KB |
testcase_16 | AC | 9,295 ms
21,900 KB |
testcase_17 | AC | 9,300 ms
21,288 KB |
testcase_18 | AC | 9,294 ms
21,360 KB |
testcase_19 | AC | 9,296 ms
21,936 KB |
testcase_20 | AC | 9,299 ms
21,744 KB |
testcase_21 | AC | 9,295 ms
21,684 KB |
testcase_22 | AC | 9,295 ms
21,360 KB |
testcase_23 | AC | 9,292 ms
21,384 KB |
testcase_24 | AC | 9,298 ms
21,876 KB |
testcase_25 | AC | 9,293 ms
21,504 KB |
testcase_26 | AC | 9,295 ms
21,888 KB |
testcase_27 | AC | 9,297 ms
21,372 KB |
testcase_28 | AC | 9,295 ms
21,516 KB |
testcase_29 | AC | 9,294 ms
21,372 KB |
testcase_30 | AC | 9,301 ms
21,516 KB |
testcase_31 | AC | 9,295 ms
21,540 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){ h=1;c=0;k=2; for(i=0;i<155;i++){ if(i==15 || i==95){ strcpy(cmd[i],"enhclick"); } else if(i==129){ strcpy(cmd[i],"buy"); strcpy(inbuild[i],"hand"); } else{strcpy(cmd[i],"click");} } for(i=155;i<n;i++){ if(xorshift()%25==0 && i<=7000){ a=(xorshift()%5); if(a==0){a=3;} else if(a==1 && k<6){a=4;k++;} else{a=1;} strcpy(cmd[i],move[a]); if(a==1){c++;} if(a!=4){ if(c==30){ if(h!=5){h++;} c=0; } if(xorshift()%5!=0){ l=h; } else{ l=(xorshift()%5)+1; } strcpy(inbuild[i],namebuild[l]); } } else{strcpy(cmd[i],"click");} } gettimeofday(&tv, NULL); nt=(tv.tv_sec*1000000+tv.tv_usec); nt-=stt; if(nt<5000000){ nt-=5000000; for(i=0;i<n;i++){ if(xorshift()%4050000<nt){ strcpy(cmd[i],bcmd[i]); strcpy(inbuild[i],binbuild[i]); } } } 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; }