結果
| 問題 |
No.78 クジ付きアイスバー
|
| コンテスト | |
| ユーザー |
IL_msta
|
| 提出日時 | 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;
}
IL_msta