CF1671B solution
Problem
给定序列 \(\{a_n\}\),对于每个 \(a_i\) 你可以将他变成 \(a_i-1\) 或 \(a_i\) 或 \(a_i+1\),是否有一种操作方法可以使该序列满足对于任意一个 \(i(1<i\le n)\) 满足 \(a_i=a_{i-1}+1\)。
link->https://codeforces.com/contest/1671/problem/B
Solution
如果我们确定了 \(a_1\) 的值,则最终序列的每个 \(a_i=a_1+i-1\)。
则问题变成了:给定序列 \(\{a_n\}\) 是否可以将每个 \(a_i\) 变成 \(a_1+i-1\)。
显而易见,最终 \(a_i\) 的值只有可能是(最初的)\(a_1-1\) 或 \(a_i\) 或 \(a_i+1\)。
则 \(a_i\) 分别取 \(a_i-1\) 或 \(a_i\) 或 \(a_i+1\),只要有一种满足条件(可以构造出题目要求的序列)即可。
Code
#include<bits/stdc++.h>
#define pd push_back
#define pb pop_back
#define mk make_pair
//#define int long long
#define PII pair<int,int>
#define _for(a,b,c) for(int a=b;a<=c;a++)
#define _rep(a,b,c) for(int a=b;a>=c;a--)
#define _go(i,u) for(int i=head[u];i;i=Edge[i].nxt)
using namespace std;
namespace I {
template <typename T> void read(T& x) {
x=0; T f=1; char ch=getchar();
while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch&15); ch=getchar(); }
x=x*f; return;
}
template <typename T,typename ...Arg> void read(T& x,Arg& ...arg) {
read(x); read(arg...);
}
}
namespace Math {
template <typename T> T power(T a,T b,T MOD) {
T ans=1; while(b) { if(b&1) ans=ans*a%MOD; a=a*a%MOD; b>>=1; } return ans%MOD;
}
template <typename T> T gcd(T a,T b) {
if(b) return gcd(b,a%b); return a;
}
template <typename T> T lcm(T a,T b) {
return a/gcd(a,b)*b;
}
template <typename T> T inv(T n,T p) {
return power(n,p-2);
}
const int Test[]={0,2,3,5,7,11,13,17,19,23,29};
template <typename T> bool is_prime(T n) {
if(n<2) return 0;
T t=n-1,k=0; while((t+1)&1) ++k,t>>=1;
_for(i,1,10) {
if(n==Test[i]) return 1;
T s=power(Test[i],t,n); T tmp=s;
_for(j,1,k) {
tmp=s*s%n; if(tmp==1&&s!=1&&s!=n-1) return 0; s=tmp;
}
if(s!=1) return 0;
}
return 1;
}
}
const int N=2e5+5;
int a[N],tmp[N],n,T;
bool Solve(int p) { //判断我们将a[1]设为a[1]+p时是否可行
_for(i,1,n) a[i]=tmp[i];
a[1]+=p;
_for(i,2,n)
if(a[i]-a[i-1]<0||a[i]-a[i-1]>2)
return false;
else
a[i]=a[i-1]+1;
return true;
}
signed main() {
I::read(T);
while(T--) {
I::read(n);
_for(i,1,n)
I::read(tmp[i]);
puts(Solve(-1)||Solve(0)||Solve(1)? "YES":"NO");
}
return 1;
}

浙公网安备 33010602011771号