题解:P17721 「FunMusic OI 1D」爱我还是他 / Who Do You Love
注意到,当我们对
而每个位置的操作二是互相独立的,我们可以令
最终只需要判断
对于一个值为真的
对于一个值为真的
代码如下,可供参考:
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int T,n,a[N],f[N][10];
int main(){
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
f[1][a[1]%3]=1;
if(a[1]>=3)f[1][a[1]%3+3]=1;
if(a[1]>=6)f[1][a[1]%3+6]=1;
for(int i=2;i<=n;i++){
for(int k=0;k<=8;k++){
if(!f[i-1][k])continue;
for(int l=0;l<=k/3;l++){
int j=a[i]-l-k+l*3;
if(j>=0){
if(j<=8)f[i][j]=1;
f[i][j%3]=1;
if(j>=3)f[i][j%3+3]=1;
if(j>=6)f[i][j%3+6]=1;
}
}
}
}
cout<<(f[n][0]?"YES\n":"NO\n");
memset(f,0,sizeof f);
}
return 0;
}