codeforces 1463B

发布时间:2024年01月19日

更一道构造,构造做的稀巴烂,在考虑是不是要开个构造专题了
题目链接

题目大意

给定数组 a a a,让你找到任意一个数组 b b b,使得 b b b满足, 1 < = b [ i ] < = 1 e 9 1<=b[i]<=1e9 1<=b[i]<=1e9,且 b b b数组相邻的元素之间可整除(不论谁是除数或被除数),且每一对应的 a [ i ] ? b [ i ] a[i]-b[i] a[i]?b[i]的绝对值的和小于等于 a a a数组的总和

思路

相邻元素之间要能整除,我们容易就想构造全是 1 1 1的数组,这样必然无法满足小于总和的条件,于是我们让每两个 1 1 1之间加上一个不为 1 1 1的数,最佳的添加数为对应的 a [ i ] a[i] a[i],然后我们分别让奇数位的为 1 1 1,偶数位的为 1 1 1,易知必有一个满足条件,输出即可

ACcode

#include<bits/stdc++.h>

using namespace std;

using ll = long long;

void solve()
{
    int n;cin >> n;
    vector<ll>a(n + 3);
    ll sum1 = 0;ll sum2 = 0;
    for (int i = 1;i <= n;i++) {
        cin >> a[i];
        if (i % 2)sum1 += a[i] - 1;//让奇数位变为1
        else sum2 += a[i] - 1;
    }
    if (sum1 < sum2) {
        for (int i = 1;i <= n;i++) {
            if (i % 2)cout << 1 << ' ';
            else cout << a[i] << ' ';
        }
    }
    else {
        for (int i = 1;i <= n;i++) {
            if (i % 2)cout << a[i] << ' ';
            else cout << 1 << ' ';
        }
    }
    cout << '\n';
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t;cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
文章来源:https://blog.csdn.net/weixin_70831807/article/details/135703907
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。