题目链接: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. MySQL远程访问授权

    开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端口. MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 3306 端口,否则远程是无法通过 330 ...

  2. 【C++】快排

    假设要排序的数据类型为int int main() { qsort(a,len,sizeof(int),cmp); //qsort(数组的起始位置,排序个数,类型大小,比较函数); } int cmp ...

  3. 八数码难题 (codevs 1225)题解

    [问题描述] 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局( ...

  4. 共享内存 share pool (1):heap /extent /chunk/

    相关概念 CHUNK: Shared pool物理层面上由许多内存块组成,这些内在块称为chunk.但是chunk是大小不一的,在内存中一个chunk是连续的. EXTENT:由多个连续的chunk组 ...

  5. VC中实现GCC的2个比较常用的位运算函数

    在GCC中内嵌了两个位运算的函数,但在VC中并没有这两个函数(有相似函数). //返回前导的0的个数. int __builtin_clz (unsigned int x) //返回后面的0个个数,和 ...

  6. EMVTag系列8《IC卡公钥证书》

    Ø  9F46    IC卡公钥证书 L: NI -C(有条件):如果支持DDA 发卡行认证过的IC 卡公钥 Ø  9F47    IC卡公钥指数 F: b T: 9F47 L: 1 or 3 C:如 ...

  7. 对 Linux 新手非常有用的20个命令

    你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳. ...

  8. go语言示例-Timer计时器的用法

    计时器用来定时执行任务,分享一段代码: package main import "time" import "fmt" func main() { //新建计时 ...

  9. Swift global function(count indexOfObject contains...)

    当你在使用Swift时会发现一些常用的函数不!见!了! 比如 String:    s.count()  s.contains() Array: a.indexOfObeject(t:<T> ...

  10. Linux内核内存管理

    <Linux内核设计与实现>读书笔记(十二)- 内存管理   内核的内存使用不像用户空间那样随意,内核的内存出现错误时也只有靠自己来解决(用户空间的内存错误可以抛给内核来解决). 所有内核 ...