题目链接: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. ASP.NET MVC5学习笔记之Controller同步执行架构分析

    在开始之前,声明一下,由于ASP.NET MVC5正式发布了,后面的分析将基于ASP.NET MVC5最新的源代码.在前面的内容我们分析了怎样根据路由信息来确定Controller的类型,并最终生成C ...

  2. Python学习教程(learning Python)--3.2 if-else分支语句

    if-else分支语句结构的特点是当conditon条件满足时,执行if下的语句块,当condition条件不满足时执行else下的语句块,也就是说根据条件来控制让某些语句执行,某些语句不被执行. i ...

  3. 《Prism 5.0源码走读》 设计模式

    Prism或Prism构建的应用程序时会使用大量的设计模式,本文简要列举Prism相关的那些设计模式. Adapter(适配器模式):Prism Library主要在Region和IoC contai ...

  4. Excle中LOOKUP经典用法

    在Excle中我们经常会遇到需要求根据某个区间的判断然后获取到对应的结果,下面是一个具体的实现例子: 例如: 现在需要实现,当输入0到25以内的任何数字时,会自动获取相应的英文字母 =IFERROR( ...

  5. Oracle表结构转换SqlSERVER表结构 脚本

    在审计工作中,有时需要将Oracle的表结构修改后再SqlSERVER中创建表结构,然后将数据导入到SqlSERVER中,在修改表结构的过程中方法狠多.手工修改,最蠢的方法,或者用工具UE批量修改,还 ...

  6. 三星Galaxy Note 10.1 N8010 最后的救赎 Andorid 5.0.2 ROM

    上市日期为2012年的三星Galaxy Note N8010 10.1采用10.1英寸TFT屏幕,分辨率为1280×800,支持10点触控,支持S pen手写笔功能.,拥有一颗1.4GHz Exyno ...

  7. SCSF智能客户端学习笔记(一)

    什么是智能客户端 要了解智能客户端,首先要认识瘦客户端技术和胖客户端技术各自的优缺点. 对于前者,典型的应用就是使用浏览器,通过输入URL远程访问服务端,并向服务端发送命令,获取服务端的资源,然后在客 ...

  8. Linux rsync 同步

    rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用.本文主要讲述的是如何自架rsync服务器,以实现文件传输.备份和镜像.相对tar ...

  9. vi/vim编辑器

    vi / vim是Unix / Linux上最常用的文本编辑器而且功能非常强大.

  10. iOS9新系统下APP Store 应用上传新指南

    一 iTunes Connect介绍 iTunes Connect是面向iOS应用开发人员的苹果门户网站,供开发人员管理其应用,跟踪下载情况.今年1月份闹得沸沸扬扬的iTunes Connect BU ...