結果

問題 No.2890 Chiffon
ユーザー srjywrdnprkt
提出日時 2024-10-02 15:04:58
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 703 ms / 2,000 ms
コード長 1,437 bytes
コンパイル時間 2,329 ms
コンパイル使用メモリ 197,676 KB
最終ジャッジ日時 2025-02-24 14:28:53
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 53
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
ll N, K;
cin >> N >> K;
vector<ll> A(K*2+1);
for (int i=0; i<K; i++){
cin >> A[i];
A[i+K] = A[i]+N*2;
}
A[K*2] = 1e9;
ll l=0, r=N+1, c;
auto f=[&](ll X){
//dp(i):i
//dp(i)=(2i+1~2i+2X-12i+2X, 2i+2XA+1)
//dp(i)=max(2i+1(A+1)/2, i+X)
int k=0, L;
vector<int> dp(N*2+2), v(N*2+2);
dp[N*2+1] = N*2+1;
for (int i=1; i<=N*2; i++){
while (k<K*2 && A[k]<i*2+1) k++;
dp[i] = min(N*2+1, max(X+i, (A[k]+1)/2));
}
iota(v.begin(), v.end(), 0);
L = K;
while(L){
vector<int> pd(N*2+2);
if (L & 1){
for (int i=1; i<=N*2+1; i++) v[i] = dp[v[i]];
}
for (int i=1; i<=N*2+1; i++) pd[i] = dp[dp[i]];
swap(pd, dp);
L >>= 1;
}
//for (int i=1; i<=N; i++) cout << v[i] << " ";
//cout << endl;
for (int i=1; i<=N; i++){
if (v[i] <= i+N) return 1;
}
return 0;
};
while(r-l>1){
c = (l+r)/2;
if (f(c)) l=c;
else r=c;
}
cout << l*2 << endl;
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0