結果
| 問題 | No.5003 物理好きクリッカー | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2018-12-25 02:45:14 | 
| 言語 | C (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 9,333 ms / 10,000 ms | 
| コード長 | 4,866 bytes | 
| コンパイル時間 | 186 ms | 
| 実行使用メモリ | 21,996 KB | 
| スコア | 29,865,351,881 | 
| 平均クエリ数 | 10000.00 | 
| 最終ジャッジ日時 | 2021-07-19 09:40:31 | 
| 合計ジャッジ時間 | 310,117 ms | 
| ジャッジサーバーID (参考情報) | judge14 / judge15 | 
| 純コード判定しない問題か言語 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 32 | 
ソースコード
#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;
      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()%8);
          if(a==0){a=3;}
          else if(a==1){a=4;}
          else{a=1;}
          strcpy(cmd[i],move[a]);
          if(a==1){c++;}
          if(a!=4){
            if(c==40){
              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");}
      }
      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;
}
            
            
            
        