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

时间:2020-12-20 19:56:06

加括号再去括号就是除变加,显然尽可能多的除变加是最优的,然后发现唯一不能变成乘数的是第二个数,所以把其他数乘起来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;
}