【CF】Day25——Codeforces Round 865 (Div. 2) C

C. Ian and Array Sorting

题目:

【CF】Day25——Codeforces Round 865 (Div. 2) C_第1张图片

思路:

找规律

 手动玩一下我们会发现一个性质,如果有两个位置 i j,且这两个位置奇偶性相同,那么就有可以这样操作 ai+-1 且 aj-+1

那我们就可以这样操作,我们将所有奇数位的数全都转移到最后一个奇数位上,所有偶数全部转移到最后一个偶数位上,那么只要最后只要偶数位的和大于奇数位的和就可以构造出来

特别的,如果是奇数一定可以构造出来,因为我们只要让第一个无穷小,最后一个无穷大,第二个无穷小 - 1,倒数第二个无穷大 - 1,以此类推即可实现

代码:

#include 
#include 
#include
#include
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"

void solve()
{
    int n;
    cin >> n;
    vector a(n);
    int altsum = 0;
    for (int i = 0; i < n; i++) 
    {
        cin >> a[i];
        if (i % 2 == 0)
        {
            altsum -= a[i];
        }
        else 
        {
            altsum += a[i];
        }
    }
    if (n % 2 || altsum >= 0)
    {
        yes;
        return;
    }
    no;
}
signed main()
{
    cin.tie(0)->sync_with_stdio(false);
    int t = 1;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

你可能感兴趣的:(c语言,算法,c++)