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

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

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

DFS过小数据的程序:

#include<iostream>//又臭又长,无语
#include<algorithm>
#include<math.h>
#include<string.h>
#include<string>
#include<set>
#include<map>
#include<cstdio>
int n,l;
int ans;
using namespace std;
string s[],s1[],tem[];
int b[];
int pan()
{
         sort(tem+,tem+n+);
        for (int i=;i<=n;i++)
       if (s1[i]!=tem[i]) return ;
     return ;
} void res(int x)
{
    for (int i=;i<=n;i++)
    tem[i][x]^=;//PS这里注意一下,字符为‘0’,或者‘1’;可以算出字符'0'^1='1','1'^1='0';
    }
void rec(int x)
{
    for (int i=;i<=n;i++)
       tem[i][x]^=;
} void dfs(int t,int k)
{
    if (t==l)
    {
      if (pan()) ans=min(ans,k);return;  }
      dfs(t+,k);
      res(t);
      dfs(t+,k+);
      rec(t);
} int main()
 {
         int t;
       freopen("A-small-practice.in","r",stdin);
       freopen("out.txt","w",stdout);
          cin>>t;
           for (int o=;o<=t;o++){
           ans=;
           memset(b,,sizeof(b));
       cout<<"Case #"<<o<<": ";
           cin>>n>>l;
        for (int i=;i<=n;i++) {cin>>s[i];tem[i]=s[i];}
        for (int i=;i<=n;i++) cin>>s1[i];
        sort(s1+,s1+n+);
        dfs(,);
        if (ans<)
        cout<<ans<<endl;
        else cout<<"NOT POSSIBLE"<<endl;
    }
  return ;

}

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

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

            for (int j=;j<=n;j++) ss[j]=s[j];

            int now=;
            for (int j=;j<l;j++)
            if (ss[][j]!=s1[i][j]){
                for (int k=;k<=n;k++)
                    ss[k][j]^=;
                    now++;
            }            sort(ss+,ss+n+);            int flag=;
           for (int k=;k<=n;k++)
            if (ss[k]!=s1[k]){flag=;break;}
            if (!flag) ans=min(ans,now);
         }

等下再做做位运算

2014_GCJ_A的更多相关文章

随机推荐

  1. Ubuntu 12.04 添加新用户并启用root登录

    启动root sudo passwd 输入密码 输入root 新密码并重复 su 切换root 添加用户比如hduser 修改密码hduserchmod u+w /etc/sudoersvi sudo ...

  2. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

  3. MVC中Model,不仅仅只是数据的传递者

    在Model使用的时候很多人回向以前写三层架构一样使用它,将Model作为数据的传递者. 比如常见的写法 public int Id { get; set; } public int RoleId { ...

  4. [原创]Postgres-XC集群笔记-概念与环境搭建

    文所描述的Postgres-XC版本:v1.2.1项目主页地址:http://sourceforge.net/projects/postgres-xc/ pdf文件下载: Postgres-XC集群搭 ...

  5. django-south

    python manage.py schemamigration youappname --initial # --initial在数据库创建models定义的表,以及South需要的south_mi ...

  6. Easy-UI 动态添加DataGrid的Toolbar按钮

    在前人的基础上进行的修改,不知道他是从哪里引用来的,所以没有粘贴引用地址. 原代码不支持1.3.6. 修改功能: 1.如果之前没有添加过工具,用这个方法不能添加(已修复): 2.估计是不支持1.3.6 ...

  7. SharePoint 2010 中使用Ztree和EasyUI样式冲突问题

    <style type="text/css"> /*解决ztree和SharePoint样式冲突问题*/ .ztree li a { display: inline-b ...

  8. 010--VS2013 C++ 平面地图贴图

    先准备好地图的小图片: //全局变量HDC mdc;HBITMAP fullmap;const int rows = 8, cols = 8; //-------------------------- ...

  9. 修改ip脚本

    1.打开运行 2.输入CMD 3.在命令提示符下输入: netsh -c interface ip dump > C:\我的网络配置.txt 4.打开您在C:\ 下的"我的网络配置 . ...

  10. 如何把bootstrap用webpack打包

    今天下载了一个anguarl2写后台,一直没有找到是如何使用bootstrap样式的,然后就全文做了搜索,发现有一段代码 import 'bootstrap-loader'; 这段代码很可疑,所以就查 ...