結果

問題 No.78 クジ付きアイスバー
ユーザー EmKjpEmKjp
提出日時 2015-03-26 21:24:36
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 2 ms / 5,000 ms
コード長 1,341 bytes
コンパイル時間 648 ms
コンパイル使用メモリ 83,480 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-08 00:29:12
合計ジャッジ時間 1,783 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 35
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<iostream>
#include<sstream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<numeric>
#include<functional>
#include<complex>

using namespace std;
#define BET(a,b,c) ((a)<=(b)&&(b)<(c))
#define FOR(i,n) for(int i=0,i##_end=(int(n));i<i##_end;i++)
#define SZ(x) (int)(x.size())
#define ALL(x) (x).begin(),(x).end()
#define MP make_pair
#define FOR_EACH(it,v) for(__typeof(v.begin()) it=v.begin(),it_end=v.end() ; it != it_end ; it++)
typedef vector<int> VI;
typedef vector<VI> VVI;

int main()
{
    int N,K;
    string S;
    cin>>N>>K>>S;
    VI hist(N, -1);
    int ans = 0 ;
    int atari = 0 ;
    FOR(i,K){
        if(atari == 0){
            ans++;
            atari++;
        }
        atari--;
        atari += S[i%N] - '0';
        if(i > N && ans == 1) break;
        if(i > N){
            if(hist[i%N] == -1){
                hist[i%N] = ans;
            }else{
                int loopIncreasing = ans - hist[i%N];
                int rem = K - (i + 1);
                int loop = rem / N;
                ans += loop * loopIncreasing;
                i += loop * N;
                //cout<<loop<<" "<<loop * N<<" "<<i<<endl;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}
0