結果
問題 | No.2890 Chiffon |
ユーザー |
![]() |
提出日時 | 2024-09-13 21:58:33 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,400 ms / 2,000 ms |
コード長 | 1,278 bytes |
コンパイル時間 | 4,424 ms |
コンパイル使用メモリ | 253,252 KB |
最終ジャッジ日時 | 2025-02-24 07:37:37 |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 53 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:29:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 29 | scanf("%d",&t); | ~~~~~^~~~~~~~~
ソースコード
#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;scanf("%d",&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+K)/K;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;}