結果
問題 | No.78 クジ付きアイスバー |
ユーザー |
![]() |
提出日時 | 2015-09-01 22:23:54 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 228 ms / 5,000 ms |
コード長 | 1,416 bytes |
コンパイル時間 | 574 ms |
コンパイル使用メモリ | 69,564 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-08 01:31:56 |
合計ジャッジ時間 | 2,690 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 35 |
ソースコード
#include <iostream> #include <vector> #include <string> #include <cstring> #include <algorithm> #include <sstream> #include <map> #include <set> #define REP(i,k,n) for(int i=k;i<n;i++) #define rep(i,n) for(int i=0;i<n;i++) #define INF 1<<30 #define pb push_back #define mp make_pair using namespace std; typedef long long ll; typedef pair<int,int> P; int main() { int n,k; cin >> n >> k; string s; cin >> s; vector<int> v(n); rep(i,n) v[i] = s[i] - '0'; if(n > k) { int ans = 0, cnt = 0; rep(i,k) { if(cnt > 0) cnt--; else ans++; cnt += v[i]; } cout << ans << endl; } else { int res = 0, cnt = 0; rep(i,n) { if(cnt > 0) cnt--; else res++; cnt += v[i]; } if(cnt >= res) { cout << res << endl; } else { int m = 0; int ans = 0, q = 0; while(m + n <= k) { m += n; if(q >= res) { q -= res; q += cnt; } else { ans += res - q; q = cnt; } } rep(i,k%n) { if(q > 0) q--; else ans++; q += v[i]; } cout << ans << endl; } } return 0; }