题目链接:https://vjudge.net/problem/UVALive-2965

题意:

有很多字符串(24),选出一些字符串,要求这些字符串的字母都是偶数次;

分析:

暴力2^24也很大了,中途相遇法;其原理就是一分为二,两组解组成问题的解;

考虑到,每个字符串出现的次数没什么关系,只要关于他的奇偶,那么就有二进制,1出现奇数次,0偶数次;

每一个字符串对应于一个A位向量,

在前半个表中,选择一些字符串(2^12),又得到一个位向量 x,要是表中存在,则选择 字符串个数较多者;

然后枚举下半个表,要是表Map中有对应的向量,就说么这两组解会构成一个满足题意的解,

 #include <bits/stdc++.h>

 using namespace std;

 const int maxn = ;
map<int,int> table; // 二进制有多少个1
int bitcount(int x) {
if(x==) return ;
else return bitcount(x/) + (x&);
} int main()
{
int n,A[maxn];
char s[]; while(scanf("%d",&n)==&&n) { for(int i=;i<n;i++) {
scanf("%s",s);
A[i] = ;
for(int j=;s[j]!='\0';j++) {
A[i]^=(<<(s[j]-'A'));
}
} table.clear();
int n1 = n/,n2 = n - n1;
for(int i=;i<(<<n1);i++) {
int x = ;
for(int j=;j<n1;j++) {
if(i&(<<j))
x^=A[j];
}
if(!table.count(x)||bitcount(table[x])<bitcount(i))
table[x] = i; // 字符串集合 x 对应的哪些字符串
} int ans = ;
for(int i=;i<(<<n2);i++) {
int x = ;
for(int j=;j<n2;j++)
if(i&(<<j))
x^=A[n1+j];
if(table.count(x)&&bitcount(ans)<bitcount(table[x])+bitcount(i))
ans = (i<<n1)^table[x];
} printf("%d\n",bitcount(ans));
for(int i=;i<n;i++)
if(ans&(<<i))
printf("%d ",i+);
puts(""); } return ;
}

LA 2965 中途相遇法的更多相关文章

  1. LA 2965 Jurassic Remains (中途相遇法)

    Jurassic Remains Paleontologists in Siberia have recently found a number of fragments of Jurassic pe ...

  2. 【UVALive】2965 Jurassic Remains(中途相遇法)

    题目 传送门:QWQ 分析 太喵了~~~~~ 还有中途相遇法这种东西的. 嗯 以后可以优化一些暴力 详情左转蓝书P58 (但可能我OI生涯中都遇不到正解是这个的题把...... 代码 #include ...

  3. uva 6757 Cup of Cowards(中途相遇法,貌似)

    uva 6757 Cup of CowardsCup of Cowards (CoC) is a role playing game that has 5 different characters (M ...

  4. HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))

    Difference Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  5. 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

  6. 高效算法——J 中途相遇法,求和

    ---恢复内容开始--- J - 中途相遇法 Time Limit:9000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Su ...

  7. uva1152 - 4 Values whose Sum is 0(枚举,中途相遇法)

    用中途相遇法的思想来解题.分别枚举两边,和直接暴力枚举四个数组比可以降低时间复杂度. 这里用到一个很实用的技巧: 求长度为n的有序数组a中的数k的个数num? num=upper_bound(a,a+ ...

  8. 中途相遇法 解决 超大背包问题 pack

    Description [题目描述] 蛤布斯有n个物品和一个大小为m的背包,每个物品有大小和价值,它希望你帮它求出背包里最多能放下多少价值的物品. [输入数据] 第一行两个整数n,m.接下来n行每行两 ...

  9. 紫书 例题8-3 UVa 1152(中途相遇法)

    这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在. 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法.这个方法可以没有一直往下求, 可以省去很多 ...

随机推荐

  1. 一个基于QT简单登录对话框

    1. 登录对话框式样 2. QLoginDialog.h #ifndef DIALOG_H #define DIALOG_H #include <QtGui/QDialog> #inclu ...

  2. Vi编辑器和Vim编辑器的区别及联系

    Vi和Vim它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面,vi使用于文本编辑,但是vim更适用于coding.vim的这些优势主要体现在 ...

  3. Storm(1)-centos7下安装单机版Strom

    1.所需软件: jdk8.zookeeper.storm 2.安装zookeeper单机版 下载:http://zookeeper.apache.org/releases.html#download ...

  4. PHP、thinkPHP5.0开发网站文件管理功能(三)重命名文件

    public function renames(){ if(request()->isAjax()){ $file = iconv('UTF-8','GB2312',urldecode(inpu ...

  5. python安装包的时候报错

    python安装包的时候报错 今天兴致勃勃的安装了一个paramiko包,过程很顺利,但是到结尾的时候报错,这就让人不爽了. 所以呢,需要安装一个名为python-dev的软件包. 该软件包包括头文件 ...

  6. sql server 2017安装

    下载: 1. 2. 3. 安装步骤: https://www.cnblogs.com/ksguai/p/5869558.html 管理工具: Microsoft SQL Server Manageme ...

  7. Unity [SerializeField]

    在Unity3d中Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示,并且定义Serialize关系. 也就是说凡是显示在Inspector 中的属性都同时具有 ...

  8. django中的Ajax文件上传

    主要介绍两个 1.ajax文件上传 2.写路由器 3.创建对应的函数 4.file_put.html代码 <!DOCTYPE html> <html lang="en&qu ...

  9. windows2008利用serv-u14.0.0.6架设FTP服务器的方法

    这几天在公司的服务器上安装serv-u,想把它做成可以传输文件的ftp服务器,结果遇到了很多问题,试了serv-u的好几个版本,结果都不行,最终只有serv-u14安装成功. 安装过程很简单,安装后除 ...

  10. jQuery 间歇式无缝滚动特效分享(三张图片平行滚动)

    最近项目中门户首页需要做出图片间歇式无缝滚动特效,但是在网上找资料都是不太理想,不过可以指导.最后自己写了一个demo实现了这个特效,分享出来. 1.jquery.cxscroll.js /*! * ...