Prove Him Wrong-Codeforces
投稿日: 更新日:
問題
個の整数列に対し以下の操作を行います。
- 2つの組を選ぶ
- とする
どのを選んで操作を行ったとしても総和が減少しない(等しいまま、もしくは増加する)個の整数列を作成できるか判定してください。
作成可能ならば出力してください。
解法
総和が減少しないということは以下の不等式を満たします。
とする。
となり、各ペアが3倍以上の差があれば良いことが分かります。
後はより大きくならないように数列を作成していけば良いです。
実装
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;
cin >> n;
vector<int> ans;
const int limit = 1e9;
long long pow3 = 1;
for(int i = 0;i < n; ++i){
if(pow3 > limit){
cout << "NO" << endl;
return;
}
ans.push_back(pow3);
pow3 *= 3;
}
cout << "YES" << endl;
cout << ans[0];
for(int i = 1;i < n; ++i){
cout << " " << ans[i];
}
cout << endl;
}
int main(){
int t;
cin >> t;
while(t--){
solve();
}
return 0;
}