1994121 | 2006-08-02 21:28:14 | Accepted | 2042 | C++ | 00:00.39 | 392K | St.Crux |
做了一个半钟头,贡献了n个wa和rte,终于ac了。题目还是比较有意思的,在算术式里插加减号,使结果被某个数整除。而且是那么的像bfs......我的dp写的一如既往的烂,而且中途还测试了一下c里%的用法。
其实这些题的做法大同小异,都是用一个数组来表示当前可能达到的状态情况,达到置1,然后在下一步搜索这个数组中上一步的情况,然后再加以处理。只是这个题数据可能比较BT一点。
还有对memcpy的赋值不理解,http://www.kfbb.cn/blog/blogview.asp?logID=482,导致我后来又wa了n次。
#include <cstdio>
#include <string>
int a[100], b[100], m, n, k;
int main()
{
int i, j, u;
//freopen("div.16", "r", stdin);
//freopen("in.txt", "r", stdin);
scanf("%d", &m);
for(i = 0; i < m; i ++)
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
if(i) printf("\n");
scanf("%d %d", &n, &k);
int t;
scanf("%d", &t);
t %= k;
if(t < 0) t += k;
a[t] = 1;
for(j = 1; j < n; j ++)
{
scanf("%d", &t);
for(u = 0; u < k; u ++)
{
if(a[u])
{
int l = (u + t) % k;
int r = (u - t) % k;
if(l < 0) l += k;
if(r < 0) r += k;
b[l] = 1;
b[r] = 1;
}
}
//memset(a, 0, sizeof(a));
memcpy(a, b, sizeof(b));
memset(b, 0, sizeof(b));
}
if(a[0])
printf("Divisible\n");
else
printf("Not divisible\n");
}
return 0;
}
评论