P1356 数列的整数性
打的骗分,在多组数据的情况下还能骗到分,可以了。又TMD是dp。
f[i][j]表示+-第i个数能否达到%p后的余数j,如果f[n][0]==true就可以。
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<algorithm> 5 #include<cmath> 6 #include<ctime> 7 #include<set> 8 #include<cstring> 9 #define inf INT_MAX 10 #define For(i,a,b) for(register int i=a;i<=b;i++) 11 #define p(a) putchar(a) 12 #define g() getchar() 13 14 using namespace std; 15 int x; 16 bool f[10010][110]; 17 int t; 18 int mod,n,sum; 19 20 void in(int &x) 21 { 22 int y=1; 23 char c=g();x=0; 24 while(c<'0'||c>'9') 25 { 26 if(c=='-') 27 y=-1; 28 c=g(); 29 } 30 while(c<='9'&&c>='0')x=x*10+c-'0',c=g(); 31 x*=y; 32 } 33 void o(int x) 34 { 35 if(x<0) 36 { 37 p('-'); 38 x=-x; 39 } 40 if(x>9)o(x/10); 41 p(x%10+'0'); 42 } 43 44 int left(int x,int mod) 45 { 46 return (x%mod+mod)%mod; 47 } 48 49 int main() 50 { 51 in(t); 52 while(t--) 53 { 54 memset(f,false,sizeof(f)); 55 in(n),in(mod); 56 in(x); 57 f[1][left(x,mod)]=1; 58 f[1][left(-x,mod)]=1; 59 For(i,2,n) 60 { 61 in(x); 62 For(j,0,mod-1) 63 f[i][j]=f[i-1][left(j-x,mod)]|f[i-1][left(j+x,mod)]; 64 } 65 if(f[n][0]) 66 puts("Divisible"); 67 else 68 puts("Not divisible"); 69 } 70 return 0; 71 }