CF1604C

题目链接

题目描述
给定一个数组,我们只能删掉满足q[i]%(i+1)!=0的元素,最终是否能把数组中元素全部删掉,能输出YES,不能输出NO

思维题。请记着一点:删除的顺序是我们定的。我们可以遍历一次数组,如果满足删除条件q[i]%(i+1)!=0那么就不去管他,如果不满足我们就来考虑他最终是否能被删掉。通过改变前面的数字的删除次序,他就一定可以到达前面的任意位置(如果不能到达,前面一定有至少一个数字删不掉),所以只需要看看i前面的数字有没有满足q[i]%(i+1)!=0的即可

#include <iostream>

using namespace std;

typedef long long LL;

const int N = 1e5 + 10;
int q[N];

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n;
		cin >> n;
		for (int i = 1; i <= n; i++)
		{
			cin >> q[i];
		}

		for (int i = 1; i <= n; i++)
		{
			if (q[i] % (i + 1) == 0)
			{
				if (i == 1) {
					puts("NO");
					goto m;
				}
				else
				{
					int flag = 0;
					for (int j = 2; j <= i + 1; j++) 
					{
						if (q[i] % j != 0)
						{
							flag = 1;
							break;
						}
					}
					if (!flag)
					{
						puts("NO");
						goto m;
					}
				}
			}
		}
		puts("YES");
	m:;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习算法的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值