結果
| 問題 |
No.78 クジ付きアイスバー
|
| コンテスト | |
| ユーザー |
hiro71687k
|
| 提出日時 | 2023-03-24 04:09:23 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,598 bytes |
| コンパイル時間 | 3,644 ms |
| コンパイル使用メモリ | 253,916 KB |
| 最終ジャッジ日時 | 2025-02-11 16:42:55 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 35 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using ll=long long;
using ld=long double;
ld pie=3.141592653589793;
ll inf=1444999999994;
ll mod=1000000007;
int main(){
ll n,k;
cin >> n >> k;
string s;
cin >> s;
s+=s;
s+=s;
s+=s;
vector<vector<pair<ll,ll>>>db(n,vector<pair<ll,ll>>(40));
for (ll i = 0; i < n; i++)
{
ll now=1;
ll id=i;
for (ll j = i; j < s.size(); j++)
{
now-=1;
now+=s[j]-'0';
if (now<=0)
{
break;
}
id=j+1;
}
if (id-i>n)
{
db[i][0]={i,inf};
}else{
db[i][0]={(id+1)%n,id-i+1};
}
}
for (ll i = 1; i < 40; i++)
{
for (ll j = 0; j < n; j++)
{
db[j][i]={db[db[j][i-1].first][i-1].first,db[db[j][i-1].first][i-1].second+db[j][i-1].second};
}
}
ll now=0;
ll ans=0;
vector<ll>two(42,1);
for (ll i = 0; i < 40; i++)
{
two[i+1]=two[i]*2;
}
while (k>0)
{
for (ll i = 0; i < 40; i++)
{
if (db[now][i].second>k)
{
if (i==0)
{
ans+=1;
k=0;
break;
}else{
ans+=two[i-1];
k-=db[now][i-1].second;
now=db[now][i-1].first;
break;
}
}
}
}
cout << ans << endl;
}
hiro71687k