オンライン実行

言語
ソースコード
タブ幅 
#include<stdio.h>
#include<string.h>
#define llinf 4154118101919364364

long long llceil(long long a,long long b){if(a%b==0){return a/b;}return (a/b)+1;}

char move[8][16]={
  "click",
  "buy",
  "sell",
  "reinforce",
  "enhclick",
  "nothing"
};

char namebuild[8][16]={
  "#",
  "hand",
  "lily",
  "factory",
  "casino",
  "grimoire"
};

long long madebuild[8]={
  1,
  1,
  10,
  120,
  2000,
  25000
};

long long bvaluebuild[8]={
  0,
  150,
  2000,
  30000,
  600000,
  10000000
};

long long tvaluebuild[8][512]={0};

long long enhbuild[8]={
  15,
  1500,
  20000,
  300000,
  6000000,
  100000000
};

long long buildown[8]={
  0,
  0,
  0,
  0,
  0,
  0
};

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

int main(int argc,char *argv[]){
  calcvbuild();
  long long i,j,n,r=0,ft=0,k=1,sf=0,id,ks,bp;
  FILE *fp;
  char s[524288],com[16],inbuild[16];
  fp=fopen(argv[1],"r");
  fscanf(fp,"%lld%s",&n,s);
  printf("%lld\n%s\n",n,s);
  fflush(stdout);
  fclose(fp);
  for(i=0;i<n;i++){
    if(ft==0){k=1;}else{k=7;}
    scanf("%s",com);
    if(strcmp(com,move[0])==0){
      r+=(madebuild[0]*k);
      printf("ok\n");
      fflush(stdout);
    }
    else if(strcmp(com,move[1])==0){
      scanf("%s",inbuild);
      id=isbuild(inbuild);
      if(id==-1){
        printf("-4\n");
        fflush(stdout);
      }
      else{
        bp=tvaluebuild[id][buildown[id]+1];
        if(sf==1){
          bp=llceil(bp*9,10);
        }
        if(r<bp){
          printf("-1\n");
          fflush(stdout);
        }
        else{
          r-=bp;
          buildown[id]++;
          printf("ok\n");
          fflush(stdout);
        }
      }
    }
    else if(strcmp(com,move[2])==0){
      scanf("%s",inbuild);
      id=isbuild(inbuild);
      if(id==-1){
        printf("-4\n");
        fflush(stdout);
      }
      else if(buildown[id]==0){
        printf("-2\n");
        fflush(stdout);
      }
      else{
        bp=tvaluebuild[id][buildown[id]];
        bp=llceil(bp,4);
        r+=bp;
        buildown[id]--;
        printf("ok\n");
        fflush(stdout);
      }
    }
    else if(strcmp(com,move[3])==0){
      scanf("%s",inbuild);
      id=isbuild(inbuild);
      if(id==-1){
        printf("-4\n");
        fflush(stdout);
      }
      else if(buildown[id]==0){
        printf("-2\n");
        fflush(stdout);
      }
      else{
        ks=enhbuild[id];
        if(sf==1){
          ks=llceil(9*ks,10);
        }
        if(r>=ks){
          r-=ks;
          madebuild[id]*=2;
          enhbuild[id]*=10;
          printf("ok\n");
          fflush(stdout);
        }
        else{
          printf("-1\n");
          fflush(stdout);
        }
      }
    }
    else if(strcmp(com,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;
        printf("ok\n");
        fflush(stdout);
      }
      else{
        printf("-1\n");
        fflush(stdout);
      }
    }
    else if(strcmp(com,move[5])==0){
      printf("ok\n");
      fflush(stdout);
    }
    else{
      printf("-3\n");
      fflush(stdout);
    }
    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;
    }
  }
  fp=fopen(argv[4],"w");
  fprintf(fp,"%lld\n",r);
  fclose(fp);
  return 0;
}
標準入力
ログインしている場合のみ実行できます。
結果を非表示にする
一般公開

実行結果

コンパイルメッセージ
標準出力
標準エラー出力
実行時間 : 12 ms
コンパイル時間/使用メモリ : 1,160 ms
0 KB
実行使用メモリ : 6868 KB
終了ステータス : 139
コード長 : 3874 Byte