题目:
一个长度为N的数组从a1,a2,…,an。如果在存在不能被整除则可以删除,剩下的数变为a1,a2,…,an-1。求是否能使得数组为空。
题解:
每个数都会因为前一个数被删除而前移,所以遍历所有情况,对数组中进行判断 ( 2~i+1)中是否存在使得不被 整除的情况。
#include<bits/stdc++.h>
#define ms(a) memset(a,0,sizeof(a));
typedef long long ll;
using namespace std;
const int N = 1e5 + 5;
int a[N];
bool solve() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
bool flag = 0;//是否存在不可被整除
for (int j = 2; j <= i + 1; j++) {
if (a[i] % j != 0) {
flag = 1;
break;
}
}
if (flag == 0)return 0;
}
return 1;
}
int main() {
int t;
cin >> t;
while (t--) {
if (solve())cout << "YES" << endl;
else cout << "NO" << endl;
}
}