P1356 数列的整数性

时间:2024-04-09 23:04:09

P1356 数列的整数性
打的骗分,在多组数据的情况下还能骗到分,可以了。又TMD是dp。
f[i][j]表示+-第i个数能否达到%p后的余数j,如果f[n][0]==true就可以。

 #include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<set>
#include<cstring>
#define inf INT_MAX
#define For(i,a,b) for(register int i=a;i<=b;i++)
#define p(a) putchar(a)
#define g() getchar() using namespace std;
int x;
bool f[][];
int t;
int mod,n,sum; void in(int &x)
{
int y=;
char c=g();x=;
while(c<''||c>'')
{
if(c=='-')
y=-;
c=g();
}
while(c<=''&&c>='')x=x*+c-'',c=g();
x*=y;
}
void o(int x)
{
if(x<)
{
p('-');
x=-x;
}
if(x>)o(x/);
p(x%+'');
} int left(int x,int mod)
{
return (x%mod+mod)%mod;
} int main()
{
in(t);
while(t--)
{
memset(f,false,sizeof(f));
in(n),in(mod);
in(x);
f[][left(x,mod)]=;
f[][left(-x,mod)]=;
For(i,,n)
{
in(x);
For(j,,mod-)
f[i][j]=f[i-][left(j-x,mod)]|f[i-][left(j+x,mod)];
}
if(f[n][])
puts("Divisible");
else
puts("Not divisible");
}
return ;
}