LA 2965 中途相遇法
题目链接: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 中途相遇法的更多相关文章
- LA 2965 Jurassic Remains (中途相遇法)
Jurassic Remains Paleontologists in Siberia have recently found a number of fragments of Jurassic pe ...
- 【UVALive】2965 Jurassic Remains(中途相遇法)
题目 传送门:QWQ 分析 太喵了~~~~~ 还有中途相遇法这种东西的. 嗯 以后可以优化一些暴力 详情左转蓝书P58 (但可能我OI生涯中都遇不到正解是这个的题把...... 代码 #include ...
- uva 6757 Cup of Cowards(中途相遇法,貌似)
uva 6757 Cup of CowardsCup of Cowards (CoC) is a role playing game that has 5 different characters (M ...
- HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))
Difference Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 高效算法——J 中途相遇法,求和
---恢复内容开始--- J - 中途相遇法 Time Limit:9000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Su ...
- uva1152 - 4 Values whose Sum is 0(枚举,中途相遇法)
用中途相遇法的思想来解题.分别枚举两边,和直接暴力枚举四个数组比可以降低时间复杂度. 这里用到一个很实用的技巧: 求长度为n的有序数组a中的数k的个数num? num=upper_bound(a,a+ ...
- 中途相遇法 解决 超大背包问题 pack
Description [题目描述] 蛤布斯有n个物品和一个大小为m的背包,每个物品有大小和价值,它希望你帮它求出背包里最多能放下多少价值的物品. [输入数据] 第一行两个整数n,m.接下来n行每行两 ...
- 紫书 例题8-3 UVa 1152(中途相遇法)
这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在. 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法.这个方法可以没有一直往下求, 可以省去很多 ...
随机推荐
- jenkins出现的问题
1.增加服务器时 要修改时,,需要设置 2:出现这个问题是 执行了npm install node-sass
- docker(2)安装centos7镜像与容器管理
1.镜像加速器 创建/etc/docker/daemon.json { "registry-mirrors": [ "https://registry.docker-cn ...
- 非局部均值(Nonlocal-Mean)
转载自网站:http://www.cnblogs.com/luo-peng/p/4785922.html 非局部均值去噪(NL-means) 非局部均值(NL-means)是近年来提出的一项新型的 ...
- 一文彻底明白linux中的selinux到底是什么
https://www.phpyuan.com/235739.html 一.前言 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内 ...
- Lock接口和ReadWriteLock接口
Lock接口 Lock接口在java.util.concurrent.locks包中,在jdk1.5之后才有. Lock接口有6个方法: void lock(); void lockInterrupt ...
- SpringBoot---数据缓存(未完待续)
1.概述 1.1 在Spring中使用缓存的关键是配置CacheManager,而SpringBoot为我们自动配置了多个CacheManager的实现: 1.2 SpringBoot的CacheMa ...
- KEIL中头文件使用配置向导
在xxx.h头文件的代码中夹杂的“<h> </h>”.“<o>”“<i>”.“<c1> </c>”和“<e& ...
- 理解 Linux backlog/somaxconn 内核参数
https://jaminzhang.github.io/linux/understand-Linux-backlog-and-somaxconn-kernel-arguments/ 各参数的含义:h ...
- [转]jquery插件创建 jquery.fn.extend与jquery.extend
本文转自:http://www.cnblogs.com/wyjgreat/archive/2011/07/19/2110754.html jQuery为开发插件提拱了两个方法,分别是: JavaScr ...
- Magnum DevStack安装
local.conf文件 [[local|localrc]]DATABASE_PASSWORD=123456RABBIT_PASSWORD=123456SERVICE_TOKEN=123456SERV ...