結果
| 問題 |
No.2567 A_1 > A_2 > ... > A_N
|
| コンテスト | |
| ユーザー |
highlighter
|
| 提出日時 | 2023-12-02 15:44:47 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 942 bytes |
| コンパイル時間 | 2,755 ms |
| コンパイル使用メモリ | 247,236 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-26 19:12:19 |
| 合計ジャッジ時間 | 5,127 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 11 WA * 5 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define int long long
bool solve(int N,int X,int a){
//A[0]==aのとき可能か
//a+(a-1)+...+(a-N+1)
//(2*a-N+1)*N/2
int sum=(2*a-N+1)*N/2;
if(sum<X){
return false;
}
sum=N*(N-1)/2+a;
if(sum>X){
return false;
}
return true;
}
int solve2(int N,int X,int r){
int l=N-1;
while((r-l)>1){
int m=(l+r)/2;
if(solve(N,X,m)){
r=m;
continue;
}
l=m;
}
return r;
}
signed main() {
int T;
cin >> T;
for(;T--;){
int N,X;
cin >> N >> X;
vector<int> A(N);
bool check=false;
for(int i=N;i>=2;i--){
int r=X-i*(i-1)/2;
int l=(i*i+i+2*X-1)/(2*i);
if(i!=N){
r=min(A[N-i-1],r);
}
if(l>r){
cout << -1 << endl;
check=true;
break;
}
A[N-i]=l;
X-=l;
}
A[N-1]=X;
if(check){
continue;
}
if(A[N-1]>=A[N-2]){
cout << -1 << endl;
continue;
}
A[N-1]=X;
for(int i : A){
cout << i << " ";
}
cout << endl;
}
}
highlighter