题目链接: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;
}
标签:856c,数字,int,cf,构造,num,long,div2
From: https://www.cnblogs.com/xjwrr/p/17302958.html