Educational Codeforces Round 100 (Rated for Div. 2) B. Find The Array 奇怪构造

B. Find The Array
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given an array [a1,a2,…,an] such that 1≤ai≤109. Let S be the sum of all elements of the array a.

Let’s call an array b of n integers beautiful if:

1≤bi≤109 for each i from 1 to n;
for every pair of adjacent integers from the array (bi,bi+1), either bi divides bi+1, or bi+1 divides bi (or both);
2∑i=1n|ai−bi|≤S.
Your task is to find any beautiful array. It can be shown that at least one beautiful array always exists.

Input
The first line contains one integer t (1≤t≤1000) — the number of test cases.

Each test case consists of two lines. The first line contains one integer n (2≤n≤50).

The second line contains n integers a1,a2,…,an (1≤ai≤109).

Output
For each test case, print the beautiful array b1,b2,…,bn (1≤bi≤109) on a separate line. It can be shown that at least one beautiful array exists under these circumstances. If there are multiple answers, print any of them.

Example
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
写的很莫名其妙,不知道怎么说,就是前后两项要满足相除乘本身要小于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;
}


猜你喜欢

转载自blog.csdn.net/qq_45891413/article/details/111499356