题目链接:http://code.google.com/codejam/contest/2984486/dashboard#s=p0

最想吐槽的是想些DFS过小数据,居然写不出来,不知道我这半年的ACM生活在干嘛?

先不说直接出最有解,但是DFS这基本的还不会,真是,估计快废了!

DFS过小数据的程序:

  1. #include<iostream>//又臭又长,无语
  2. #include<algorithm>
  3. #include<math.h>
  4. #include<string.h>
  5. #include<string>
  6. #include<set>
  7. #include<map>
  8. #include<cstdio>
  9. int n,l;
  10. int ans;
  11. using namespace std;
  12. string s[],s1[],tem[];
  13. int b[];
  14. int pan()
  15. {
  16.          sort(tem+,tem+n+);
  17.         for (int i=;i<=n;i++)
  18.        if (s1[i]!=tem[i]) return ;
  19.      return ;
  20. }
  21.  
  22. void res(int x)
  23. {
  24.     for (int i=;i<=n;i++)
  25.     tem[i][x]^=;//PS这里注意一下,字符为‘0’,或者‘1’;可以算出字符'0'^1='1','1'^1='0';
  26.     }
  27. void rec(int x)
  28. {
  29.     for (int i=;i<=n;i++)
  30.        tem[i][x]^=;
  31. }
  32.  
  33. void dfs(int t,int k)
  34. {
  35.     if (t==l)
  36.     {
  37.       if (pan()) ans=min(ans,k);return;  }
  38.       dfs(t+,k);
  39.       res(t);
  40.       dfs(t+,k+);
  41.       rec(t);
  42. }
  43.  
  44. int main()
  45.  {
  46.          int t;
  47.        freopen("A-small-practice.in","r",stdin);
  48.        freopen("out.txt","w",stdout);
  49.           cin>>t;
  50.            for (int o=;o<=t;o++){
  51.            ans=;
  52.            memset(b,,sizeof(b));
  53.        cout<<"Case #"<<o<<": ";
  54.            cin>>n>>l;
  55.         for (int i=;i<=n;i++) {cin>>s[i];tem[i]=s[i];}
  56.         for (int i=;i<=n;i++) cin>>s1[i];
  57.         sort(s1+,s1+n+);
  58.         dfs(,);
  59.         if (ans<)
  60.         cout<<ans<<endl;
  61.         else cout<<"NOT POSSIBLE"<<endl;
  62.     }
  63.   return ;

}

正解是:枚举第I个数,因为存在解的话肯定是A中第I个数与B第一个数相同,然后根据两者数字的不同去跟新其他位数上的数!复杂度大概是O(N*N*L);

部分代码:  for (int i=1;i<=n;i++){

  1.             for (int j=;j<=n;j++) ss[j]=s[j];
  2.  
  3.             int now=;
  4.             for (int j=;j<l;j++)
  5.             if (ss[][j]!=s1[i][j]){
  6.                 for (int k=;k<=n;k++)
  7.                     ss[k][j]^=;
  8.                     now++;
  9.             }
  10.  
  11.            sort(ss+,ss+n+);
  12.  
  13.            int flag=;
  14.            for (int k=;k<=n;k++)
  15.             if (ss[k]!=s1[k]){flag=;break;}
  16.             if (!flag) ans=min(ans,now);
  17.          }

等下再做做位运算

2014_GCJ_A的更多相关文章

随机推荐

  1. scala学习资料

    强烈推荐一个s在线学习scala的网站: http://zh.scala-tour.com/#/overview

  2. 关联参数(&的用法)

    <?php header("Content-Type:text/html;charset=gb2312"); function test1(&$a){ $a.=&qu ...

  3. Winform开发几个常用的开发经验及知识积累(一)

    本人做Winform开发多年,孜孜不倦,略有小成,其中收集或者自己开发一些常用的东西,基本上在各个项目都能用到的一些开发经验及知识积累,现逐步介绍一些,以飨读者,共同进步. 1.窗口[×]关闭按钮变为 ...

  4. Moses与IRSTLM共同编译失败的解决方案:fatal error: dictionary.h no such file or 目录

    已经解决: 错误原因在于始终没用又用已经编译安装过的irstlm而是一直用那个原文件夹造成的,而这里Manual似乎也写错了,manual里有很强的误导性:

  5. Android请求返回417解决办法

    今天碰到个很奇怪的问题,APP通过代理链接服务器会收到HTTP 417错误,经过网上查找发现是由于以下代码造成: HttpParams params = new BasicHttpParams(); ...

  6. SAP CRM 项目笔记(一) SOW(工作说明书)讨论

    前记 前两天在搜索资料时,看到一个网友在博客里面记录下了自己参于项目中的所有笔记.我觉得这个想法很不错,所以决定开笔记录下SAP CRM整个项目的实施和开发过程. 之前参加集团的SAP ERP(FI/ ...

  7. hdu 2660 Accepted Necklace

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2660 Accepted Necklace Description I have N precious ...

  8. bzoj 1054 移动玩具

    题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1054 移动玩具 Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想 ...

  9. golang的并发

    Golang的并发涉及二个概念: goroutine channel goroutine由关键字go创建. channel由关键字chan定义 channel的理解稍难点, 最简单地, 你把它当成Un ...

  10. iOS进阶学习-CoreData

    一.CoreData数据库框架的优势 1.CoreData数据持久化框架是Cocoa API的一部分,首次在iOS5版本的系统中出现,它允许按照实体-属性-值模型组织数据,并以XML.二进制文件或者S ...