[Codeforces] CF1603A Di-visible Confusion

发布时间 2023-11-30 21:12:22作者: crazy--boy

CF1603A Di-visible Confusion

题目

给一个长度为 \(n\) 的序列 \(a_1,a_2,\dots,a_n\),对于每个位置 \(i\),如果 \(a_i\%\left(i+1\right)\not=0\),就可以将 \(a_i\) 删掉。删掉之后,后面的数都会往前面移动一位。问能否将序列删成空。

数据范围

\(1\le t\le10^4,1\le n\le10^5,1\le \sum n\le3\times10^5,1\le a_i\le10^9\)

样例输入 #1

5
3
1 2 3
1
2
2
7 7
10
384836991 191890310 576823355 782177068 404011431 818008580 954291757 160449218 155374934 840594328
8
6 69 696 69696 696969 6969696 69696969 696969696

样例输出 #1

YES
NO
YES
YES
NO

思路

不难发现,当\(a_i\)不能被删除时,\(a_i\nmid 2,3,4...i,i+1\),所以我们只需要判断是否当前的\(a_i\)满足条件

数据似乎有点水,\(O(n^2)\)都能过

代码

#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int Maxn=1e5+10;
int a[Maxn];
int n,flag,cnt;
void run()
{
	cin>>n;flag=1;cnt=1;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		bool find=0;
		for(int j=1;j<=i;j++)
		{
			if(a[i]%(j+1)!=0)
			{
				find=1;
				break;
			}
		}
		if(!find) flag=0;
	}
	cout<<(flag?"Yes":"No")<<endl;
}
signed main()
{
	int t;
	cin>>t;
	while(t--) run();
	return 0;
}