前言
t
a
g
:
tag:
tag:思维
作用域
*1300
传送门 :
题意 :
给定你一个数组,询问是否可以通过操作使得数组变为空
操作定义如下 :
如果
a
[
i
]
%
(
i
+
1
)
!
=
0
a[i]\%(i+1)!=0
a[i]%(i+1)!=0那么我们可以移除
a
[
i
]
a[i]
a[i]
思路 :
我们考虑 a i a_i ai当且仅当 a i % ( i + 1 ) ! = 0 a_i\%(i+1)!=0 ai%(i+1)!=0时,我们可以进行交换
但是又因为我们可以通过删除前面的一些数,令 i − − i-- i−−
因此 a i a_i ai的操作作用域是 2 < = j < = ( i + 1 ) 2<=j<=(i+1) 2<=j<=(i+1)
当且仅当其中任意一个数满足操作条件的时候进行操作
然后我们只需要正向枚举即可,因为前面的数对后面的有影响
code :
int n;
int a[N];
void solve(){
int del = 0 ;
cin>>n;
for(int i = 1;i<=n; i ++ ) cin>>a[i];
for(int i=1;i<=n;i++){
int st = 0;
for(int j = 2;j<=i+1; j ++ ){
if(a[i]%j!=0){
st = 1;
break;
}
}
if(!st){
cout<<"NO"<<endl;
return;
}
}
cout<<"YES"<<endl;
}
int main(){
int t;cin>>t;while(t--)
solve();
return 0 ;
}