結果
| 問題 |
No.2221 Set X
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-02-17 22:42:53 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 600 ms / 2,000 ms |
| コード長 | 2,059 bytes |
| コンパイル時間 | 4,600 ms |
| コンパイル使用メモリ | 252,020 KB |
| 最終ジャッジ日時 | 2025-02-10 17:39:36 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 40 |
ソースコード
#include <bits/stdc++.h>
#include <cassert>
#include <cmath>
#include <complex>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vll>;
using vvvll = vector<vvll>;
#define all(A) A.begin(),A.end()
#define rep(i, n) for (ll i = 0; i < (ll) (n); i++)
template<class T>
bool chmax(T& p, T q, bool C = 1) {
if (C == 0 && p == q) {
return 1;
}
if (p < q) {
p = q;
return 1;
}
else {
return 0;
}
}
template<class T>
bool chmin(T& p, T q, bool C = 1) {
if (C == 0 && p == q) {
return 1;
}
if (p > q) {
p = q;
return 1;
}
else {
return 0;
}
}
ll gcd(ll(a), ll(b)) {
if (a == 0)return b;
if (b == 0)return a;
ll c = a;
while (a % b != 0) {
c = a % b;
a = b;
b = c;
}
return b;
}
ll sqrtz(ll N) {
ll L = 0;
ll R = sqrt(N) + 10000;
while (abs(R - L) > 1) {
ll mid = (R + L) / 2;
if (mid * mid <= N)L = mid;
else R = mid;
}
return L;
}
using mint = modint998244353;
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
ll N;
cin>>N;
vll A(N);
rep(i,N)cin>>A[i];
ll an=1e18;
ll x=-1;
for(ll i=1;i<=sqrtz(2*N)+3;i++){
//<ll> S;
ll res=0;
ll d=-1;
rep(j,N){
if(d!=A[j]/i){
res++;
d=A[j]/i;
}
}
if(chmin(an,(i+1)*res))x=i;
}
for(ll i=sqrtz(2*N);i<=N;i++){
if(i<=0)continue;
ll res=0;
ll L=0;
while(1){
auto p=lower_bound(all(A),L*i);
if(p==A.end()){
break;
}
res++;
L=(*p/i)+1;
if(res*(i+1)>=an)break;
}
if(chmin(an,res*(i+1)))x=i;
}
for(ll i=N+1;i<=2*N;i++){
if(A[0]/i==A[N-1]/i){
if(chmin(an,(i+1)*1))x=i;
}
}
cout<<x<<endl<<an<<endl;
}