結果
| 問題 |
No.78 クジ付きアイスバー
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-09-25 08:10:42 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,522 bytes |
| コンパイル時間 | 634 ms |
| コンパイル使用メモリ | 58,832 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-11-18 11:41:46 |
| 合計ジャッジ時間 | 1,855 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 35 |
ソースコード
#include <iostream>
#include <string>
using namespace std;
pair<int,int> calc(string s,int x){
pair<int,int> p;
int y=0;
for(int i=0; i<s.size(); ++i){
if(s[i]=='0'){
if(x>0) x-=1;
else y+=1;
} else if(s[i]=='1'){
if(x>0) x-=1, x+=1;
else x+=1, y+=1;
} else if(s[i]=='2'){
if(x>0) x-=1, x+=2;
else x+=2, y+=1;
}
}
p.first=x;
p.second=y;
return p;
}
int main(){
int N,K; cin>>N>>K;
string S; cin>>S;
string S2=S;
S2+=S;
pair<int,int> p1=calc(S,0);
int p1_x=p1.first;
int p1_y=p1.second;
pair<int,int> p2=calc(S2,p1_x);
int p2_x=p2.first;
int p2_y=p2.second;
if(p1_x>=p2_x){
int y_sum=0;
if(N>K){
string S3=S.substr(0,K);
int y_last=calc(S3,0).second;
y_sum=y_last;
} else if(N==K){
y_sum=p1_y;
} else {
y_sum+=p1_y;
int loop_cnt=(K-N)/N;
y_sum+=calc(S,p1_x).second*loop_cnt;
int S_last_cnt=K%N;
string S3=S.substr(0,S_last_cnt);
int y_last=calc(S3,p1_x).second;
y_sum+=y_last;
}
cout<<y_sum<<endl;
} else {
int y_sum=0;
if(N>K){
string S3=S.substr(0,K);
int y_last=calc(S3,0).second;
y_sum=y_last;
} else if(N==K){
y_sum=p1_y;
} else {
y_sum+=p1_y;
int wx=p1_x,wy=p1_y;
while(1){
int wx2=calc(S,wx).first;
int wy2=calc(S,wx).second;
if(wy2==wy) break;
wx=wx2;
wy=wy2;
y_sum+=wy2;
}
}
cout<<y_sum<<endl;
}
return 0;
}