P1356 数列的整数性

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 }

 

posted @ 2017-10-26 18:01  WeiAR  阅读(266)  评论(0编辑  收藏  举报