結果
| 問題 | No.5003 物理好きクリッカー |
| コンテスト | |
| ユーザー |
ts_
|
| 提出日時 | 2018-12-05 22:48:27 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 322 ms / 10,000 ms |
| コード長 | 3,805 bytes |
| 記録 | |
| コンパイル時間 | 1,280 ms |
| 実行使用メモリ | 21,984 KB |
| スコア | 212,924,864,115 |
| 平均クエリ数 | 10000.00 |
| 最終ジャッジ日時 | 2021-07-19 08:49:09 |
| 合計ジャッジ時間 | 14,377 ms |
|
ジャッジサーバーID (参考情報) |
judge12 / judge11 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define rep(i,n) FOR(i,0,n)
#define pb emplace_back
typedef long long ll;
typedef pair<int,int> pint;
const int N=10000;
string S;
ll tot=0;
vector<string> mov={"click","buy","sell","reinforce","enhclick"};
vector<string> nam={"hand","lily","factory","casino","grimoire"};
ll bcost[5]={150,2000,30000,600000,10000000},rcost[6]={150,20000,300000,6000000,100000000,15};
ll base[5]={1,10,120,2000,25000};
int satu[5]={0,8,8,7,14};
int numfa[5],numref[6];
int feverend=0,pfac=1;
bool disc=false;
pint ans[N];
inline void nxphase(int turn){
if(S[turn]=='B') tot+=(tot+99)/100;
else if(S[turn]=='F') feverend=turn+20,pfac=7;
else if(S[turn]=='S') disc=true;
else disc=false;
if(feverend==turn) pfac=1;
return;
}
inline ll get_c(){
ll ret=0;
rep(i,5){
ret+=(base[i]<<numref[i])*numfa[i];
}
return ret*pfac;
}
int nxb=0,nxs=0;
void init(){
int turn=0;
ans[turn]={0,0};++tot;++turn;
while(numref[5]<2){
if(tot>=rcost[5]){
ll tcos=rcost[5];
if(disc) tcos=(tcos*9+9)/10;
tot-=tcos;
rcost[5]*=10;++numref[5];
ans[turn]={4,0};
}
else{
ans[turn]={0,0};tot+=(1ll<<numref[5]);
}
nxphase(turn);
++turn;
}
cerr<<turn<<" "<<tot<<endl;
FOR(i,1,5){
while(numfa[i]<satu[i]){
if(turn+12<N&&S[turn+12]=='S') nxs=turn+12;
if(turn>nxs&&(i==3||i==2)&&numref[i-1]==0&&tot>(disc?0.9:1.0)*rcost[i-1]){
ll tcos=rcost[i-1];
if(disc) tcos=(tcos*9+9)/10;
tot-=tcos;
rcost[i-1]*=10;++numref[i-1];
ans[turn]={3,i-1};
}
else if(turn>nxs&&tot>(disc?0.9:1.0)*bcost[i]){
ll tcos=bcost[i];
if(disc) tcos=(tcos*9+9)/10;
tot-=tcos;
bcost[i]=(bcost[i]*6+4)/5;++numfa[i];
ans[turn]={1,i};
}
else{
ans[turn]={0,0};tot+=(1ll<<numref[5])*pfac;
}
tot+=get_c();
nxphase(turn);
++turn;
if(turn==7000) break;
}
cerr<<turn<<" "<<tot<<endl;
if(turn==7000) break;
}
int cnt=0,cur=2;
while(turn<N){
if(turn+3<N&&S[turn+3]=='B') nxb=turn+3;
if(turn+100<N&&S[turn+100]=='S') nxs=turn+100;
if(turn>nxb&&turn>nxs&&numref[4]==1&&numref[3]==0&&tot>=(disc?0.9:1.0)*rcost[3]){
ll tcos=rcost[3];
if(disc) tcos=(tcos*9+9)/10;
tot-=tcos;
rcost[3]*=10;++numref[3];
ans[turn]={3,3};
}
else if(turn>nxb&&turn>nxs&&numref[4]==2&&numref[3]==1&&tot>=(disc?0.9:1.0)*rcost[3]){
ll tcos=rcost[3];
if(disc) tcos=(tcos*9+9)/10;
tot-=tcos;
rcost[3]*=10;++numref[3];
ans[turn]={3,3};
}
else if(turn>nxb&&turn>nxs&&turn<8500&&cnt<2&&tot>=(disc?0.9:1.0)*rcost[4]){
ll tcos=rcost[4];
if(disc) tcos=(tcos*9+9)/10;
tot-=tcos;
rcost[4]*=10;++numref[4];
ans[turn]={3,4};
++cnt;
cerr<<turn<<endl;
}
else if(turn>nxb&&turn>nxs&&turn<8500&&numref[4]==2&&numfa[4]<20&&tot>=(disc?0.9:1.0)*bcost[4]){
ll tcos=bcost[4];
if(disc) tcos=(tcos*9+9)/10;
tot-=tcos;
bcost[4]=(bcost[4]*6+4)/5;++numfa[4];
ans[turn]={1,4};
}
else if(turn>nxb&&turn>nxs&&turn<8500&&numref[3]==2&&numfa[3]<22&&tot>=(disc?0.9:1.0)*bcost[3]){
ll tcos=bcost[3];
if(disc) tcos=(tcos*9+9)/10;
tot-=tcos;
bcost[3]=(bcost[3]*6+4)/5;++numfa[3];
ans[turn]={1,3};
}
else if(cur<5&&numfa[cur]>0&&(turn>=N-50)){
ans[turn]={2,cur};
tot+=(ll)(bcost[cur]+3)/4;
--numfa[cur];
bcost[cur]=(ll)((double)bcost[cur]/1.2);//tekito-
if(numfa[cur]==0) ++cur;
}
else{ans[turn]={0,0};tot+=(1ll<<numref[5])*pfac;}
tot+=get_c();
nxphase(turn);
++turn;
}
cerr<<turn<<" "<<tot<<endl;
}
int main(){
int drop;
cin>>drop>>S;
init();
cerr<<tot<<endl;
string ds;
rep(i,N){
if(ans[i].first==0) cout<<"click"<<endl;
else if(ans[i].first==4) cout<<"enhclick"<<endl;
else{
cout<<mov[ans[i].first]<<" "<<nam[ans[i].second]<<endl;
}
cin>>ds;
}
return 0;
}
ts_