B.テスト
あたりの配列時間制限を見つける2秒
テストあたりのメモリ制限256メガバイト
入力標準入力
出力標準出力
1≤ai≤109となるような配列[a1、a2、…、an]が与えられます。Sを配列aのすべての要素の合計とします。
次の場合、n個の整数の配列bを美しいと呼びましょう。
1からnまでの各iに対して1≤bi≤109。
配列(bi、bi + 1)の隣接する整数のペアごとに、biがbi + 1を除算するか、bi + 1がbiを除算します(またはその両方)。
2∑i = 1n | ai−bi |≤S。
あなたの仕事は、美しい配列を見つけることです。少なくとも1つの美しい配列が常に存在することを示すことができます。
入力
最初の行には、1つの整数t(1≤t≤1000)—テストケースの数が含まれています。
各テストケースは2行で構成されています。最初の行には1つの整数n(2≤n≤50)が含まれています。
2行目には、n個の整数a1、a2、…、an(1≤ai≤109)が含まれています。
出力
各テストケースについて、美しい配列b1、b2、…、bn(1≤bi≤109)を別々の行に出力します。これらの状況下では、少なくとも1つの美しいアレイが存在することを示すことができます。複数の回答がある場合は、それらのいずれかを印刷してください。
例
inputCopy
4
5
1 2 3 4 5
2
4 6
2
1 1000000000
6
3 4 8 1 2 3
outputCopy
3 3 3 3 3
3 6
1 1000000000
4 4 8 1 3 3
書き込みは非常に不可解ですが、私は方法がわかりませんつまり、前後です。2つの項目は、除算と乗算自体が1未満でなければならないことを満たさなければなりません。そうでない場合は、1になります。
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
#include<memory.h>
#include<cmath>
#include<assert.h>
#include<vector>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
int a[maxn],b[maxn];
vector<int>l,r;
void solve(){
ll t;
cin>>t;
while(t--){
ll n;
cin>>n;
ll sum=0;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
b[1]=a[1];
for(int i=2;i<=n;i++)
{
if(a[i]%b[i-1]==0){
b[i]=a[i];
}
else
{
if(fabs(a[i]-a[i]/b[i-1]*b[i-1])<fabs(a[i]-1))
b[i]=a[i]/b[i-1]*b[i-1];
else{
b[i]=1;
}
}
}
for(int i=1;i<=n;i++){
cout<<b[i]<<' ';
}
cout<<endl;
}
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
solve();
return 0;
}