結果
問題 | No.78 クジ付きアイスバー |
ユーザー |
![]() |
提出日時 | 2015-07-08 07:15:38 |
言語 | C++11 (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,687 bytes |
コンパイル時間 | 1,724 ms |
コンパイル使用メモリ | 84,848 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-06 17:10:36 |
合計ジャッジ時間 | 1,831 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 32 WA * 3 |
ソースコード
#define _USE_MATH_DEFINES#include <iostream>#include <iomanip>#include <algorithm>#include <cmath>#include <string>#include <list>#include <queue>#include <vector>#include <complex>#include <set>/////////#define REP(i, x, n) for(int i = x; i < n; i++)#define rep(i,n) REP(i,0,n)#define P(p) cout<<(p)<<endl;/////////typedef long long LL;typedef long double LD;/////////using namespace::std;/////////int main(void){std::cin.tie(0);std::ios::sync_with_stdio(false);std::cout << std::fixed;////cout << setprecision(6);//int N,K;string str;cin>>N>>K>>str;int Limit=0,ama=0;//1箱を買い切る本数、1箱を越える余り当たりint sum=0;//現在までの取得本数int kpn = K%N;int kpnB = 0;bool buy = false;//購入フラグint count = 0;//購入本数for(int i=0;i < N;++i){if( i+1 > sum){++sum;++Limit;buy = true;}else{buy = false;}sum += str[i] - '0';if(buy == true){++count;}if( kpn != 0 && sum >= kpn && kpnB == 0){kpnB = count;}}if(N!=1){ama = sum%N;}else{ama = sum - 1;}if( Limit <= ama ){if(K<N){P(kpnB);}else{P(Limit);}}else if( ama <= 0 ){P( K/N * Limit + kpnB );}else{int ans = 0;int nokori ;int kuriAma = 0;if( K >= 2*N ){ans += Limit + (Limit-ama)*(K/N-2);//買う//N*(S-1)+ama取得_?nokori = N + kpnB;kuriAma = ama;}else{nokori = K;kuriAma = 0;}int sum2 = kuriAma;int count2 = 0;for(int i=0; i<2*N;++i){if( i+1 > sum2){++sum2;++count2;}sum2 += str[i%N] - '0';if( sum2 >= nokori ){break;}}P(ans + count2);}return 0;}