正文

Zju 2042 Divisibility2006-08-02 21:46:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cruxd/17133.html

分享到:

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;
}

阅读(3458) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册