Educational Codeforces Round 100 (Rated for Div. 2) B. Find The Array(思维)

https://codeforces.com/contest/1463/problem/B

题目大意:

给定n个数字的数组a,让我们凑出数组b;

满足b[i]要么可以整除b[i+1],要么可以被b[i+1]整除,同时2*求和abs(a[i]-b[i])[1,n]<=sum(a[1]+,,,+a[n])。

表示这样的b数组是一定存在的,让我们构造出这样的b数组出来。
input 
4
5
1 2 3 4 5
2
4 6
2
1 1000000000
6
3 4 8 1 2 3
output 
3 3 3 3 3
3 6
1 1000000000
4 4 8 1 3 3

难怪评分1400,半天不知道怎么构造
看了下题解,果然奇妙

  • 先计数,求奇数总和以及偶数总和
  • 奇数总和 > 偶数总和时,保留下标为奇数时候的数据,偶数下标数据通通改为1;
    相反,偶数下标数据保留,奇数下标数据改为1。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=200200,M=2002;
LL a[N];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    cin>>T;
    while(T--)
    {
        LL n;
        cin>>n;
        LL ji=0,ou=0;
        for(LL i=1;i<=n;i++)
        {
            cin>>a[i];
            if(i%2==1) ji+=a[i];
            else ou+=a[i];
        }
        if(ji>ou)
        {
            for(LL i=1;i<=n;i++)
            {
                if(i%2==1) cout<<a[i]<<" ";
                else cout<<"1"<<" ";
            }
        }
        else
        {
            for(LL i=1;i<=n;i++)
            {
                if(i%2==0) cout<<a[i]<<" ";
                else cout<<"1"<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}
posted @ 2022-10-07 20:15  Vijurria  阅读(15)  评论(0编辑  收藏  举报