bzoj 1385: [Baltic2000]Division expression【脑洞】

加括号再去括号就是除变加,显然尽可能多的除变加是最优的,然后发现唯一不能变成乘数的是第二个数,所以把其他数乘起来mod第二个数,如果是0就是YES,否则说明最后不能除尽,就是NO

#include<iostream>
#include<cstdio>
using namespace std;
int T,n,nw,mod;
int read()
{
	int r=0,f=1;
	char p=getchar();
	while(p>'9'||p<'0')
	{
		if(p=='-')
			f=-1;
		p=getchar();
	}
	while(p>='0'&&p<='9')
	{
		r=r*10+p-48;
		p=getchar();
	}
	return r*f;
}
int main()
{
	T=read();
	while(T--)
	{
		n=read(),nw=read();
		if(n==1)
		{
			puts("YES");
			continue;
		}
		mod=read();
		for(int i=3;i<=n;i++)
			nw=1ll*nw*read()%mod;
		if(nw==0)
			puts("YES");
		else
			puts("NO");
	}
	return 0;
}
posted @ 2018-11-14 17:05  lokiii  阅读(116)  评论(0编辑  收藏  举报