Educational Codeforces Round 100(Rated forDiv。2)B。配列を見つける奇怪編

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;
}


おすすめ

転載: blog.csdn.net/qq_45891413/article/details/111499356