Hello worl|

Vijurria

园龄:2年11个月粉丝:6关注:2

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

本文作者:Vijurria

本文链接:https://www.cnblogs.com/Vivian-0918/p/16760616.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Vijurria  阅读(16)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起