cf-div2-856c

发布时间 2023-04-10 15:09:09作者: 安潇末痕

题目链接:https://codeforces.com/contest/1816/problem/C

我是傻逼,否了自己的第一直觉。。。

思路:
构造方法:以最后一个值的数值\(x\)为基准,把所有的的数字(除第一个)调整为\(x\)
以n的奇偶性分为两种情况。
当n为奇数时:
\(第一个数字y小于等于x,构造成功。否则就除了第一个数字外,将其他数字两两变为y,构造成功。\)
当n为偶数时:
\(第一个数字y小于等于x,构造成功。否则构造失败,即不存在构造(强行按照第一种方式会出现循环,可以自己手玩试试)。\)

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 300010;
long long num[N];
void solve(){
    int n;
    cin>>n;
    for (int i=1;i<=n;i++) cin>>num[i];
    for (int i=n-1;i>1;i--){
        num[i-1] -= (num[i]-num[i+1]);
        num[i] -= (num[i]-num[i+1]);
    }
    if (n&1) cout<<"Yes\n";
    else{
        if (num[1]<=num[2]) cout<<"Yes\n";
        else cout<<"No\n";
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T;
    T = 1;
    cin>>T;
    while(T--) solve();
    return 0;
}