結果
問題 | No.2890 Chiffon |
ユーザー |
![]() |
提出日時 | 2024-09-13 21:57:43 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,264 bytes |
コンパイル時間 | 4,319 ms |
コンパイル使用メモリ | 253,172 KB |
最終ジャッジ日時 | 2025-02-24 07:36:29 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 TLE * 28 |
ソースコード
#include <stdio.h>#include <atcoder/all>#include <bits/stdc++.h>using namespace std;using namespace atcoder;using mint = modint998244353;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf32 1000000001#define Inf64 4000000000000000001LLvector<long long> merge(vector<long long> &a,vector<long long> &b){vector<long long> ret(a.size());rep(i,a.size()){int to = i + a[i];to %= a.size();ret[i] = a[i] + b[to];}return ret;}int main(){long long N,K;cin>>N>>K;N*=2;N/=2;vector<long long> a(N);rep(i,K){int t;cin>>t;t--;a[t/2]++;}rep(i,N)a.push_back(a[i]);vector<int> nxt(N);{int last = -1;for(int i=N*2-1;i>=0;i--){if(a[i])last = i;if(last!=-1)nxt[i%N] = last-i+1;}}a.insert(a.begin(),0);rep(i,a.size()-1){a[i+1]+=a[i];}int ok = 1,ng = N;while(ng-ok>1){int mid = (ok+ng)/2;vector<long long> dp(N);rep(i,N){int t = a[i+mid] - a[i];dp[i] = max(nxt[i],mid);}vector<long long> cur(N,0);rep(i,19){if((K>>i)&1)cur = merge(cur,dp);dp= merge(dp,dp);}long long mini = Inf64;rep(i,N){if(cur[i]!=-1){mini = min(mini,cur[i]);}}if(mini<=N)ok = mid;else ng = mid;}cout<<ok*2<<endl;return 0;}