結果

問題 No.5003 物理好きクリッカー
ユーザー butsurizukibutsurizuki
提出日時 2018-12-25 02:06:01
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 323 ms / 10,000 ms
コード長 4,234 bytes
コンパイル時間 174 ms
実行使用メモリ 21,924 KB
スコア 4,860,454,670
平均クエリ数 10000.00
最終ジャッジ日時 2021-07-19 09:35:38
合計ジャッジ時間 13,224 ms
ジャッジサーバーID
(参考情報)
judge14 / judge10
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 313 ms
21,336 KB
testcase_01 AC 311 ms
21,828 KB
testcase_02 AC 311 ms
21,684 KB
testcase_03 AC 311 ms
21,504 KB
testcase_04 AC 309 ms
21,852 KB
testcase_05 AC 310 ms
21,852 KB
testcase_06 AC 316 ms
21,456 KB
testcase_07 AC 310 ms
21,348 KB
testcase_08 AC 311 ms
21,360 KB
testcase_09 AC 313 ms
21,504 KB
testcase_10 AC 310 ms
21,324 KB
testcase_11 AC 314 ms
21,864 KB
testcase_12 AC 312 ms
21,504 KB
testcase_13 AC 309 ms
21,864 KB
testcase_14 AC 312 ms
21,348 KB
testcase_15 AC 313 ms
21,672 KB
testcase_16 AC 310 ms
21,348 KB
testcase_17 AC 322 ms
21,876 KB
testcase_18 AC 310 ms
21,864 KB
testcase_19 AC 309 ms
21,504 KB
testcase_20 AC 311 ms
21,528 KB
testcase_21 AC 310 ms
21,864 KB
testcase_22 AC 308 ms
21,840 KB
testcase_23 AC 314 ms
21,324 KB
testcase_24 AC 312 ms
21,516 KB
testcase_25 AC 323 ms
21,360 KB
testcase_26 AC 313 ms
21,828 KB
testcase_27 AC 310 ms
21,504 KB
testcase_28 AC 315 ms
21,336 KB
testcase_29 AC 312 ms
21,504 KB
testcase_30 AC 314 ms
21,516 KB
testcase_31 AC 321 ms
21,348 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#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){
    calcvbuild();
    struct timeval tv;
    gettimeofday(&tv, NULL);
    seed=(tv.tv_sec*1000000+tv.tv_usec);
    long long i,j,n,m,k,a,b,c,h,w,r=0,l,t;
    char dum[16];
    char cmd[10005][16];
    char bcmd[10005][16];
    char inbuild[10005][16];
    char binbuild[10005][16];
    scanf("%lld%s",&n,s);

    for(i=0;i<16;i++){
      if(i==15){
        strcpy(bcmd[i],"enhclick");
      }
      else{strcpy(bcmd[i],"click");}
    }

    for(i=16;i<n;i++){
      if(xorshift()%25==0){
        a=(xorshift()%3);
        a++;
        if(a>1){a++;}
        strcpy(bcmd[i],move[a]);
        if(a!=4){
          a=xorshift()%5;
          a++;
          strcpy(binbuild[i],namebuild[a]);
        }
      }
      else{strcpy(bcmd[i],"click");}
    }

    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;
}
0