LA 2965 Jurassic Remains / 中途相遇法

2024-06-15 12:08

本文主要是介绍LA 2965 Jurassic Remains / 中途相遇法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

求尽量多的字符串 每种大写字母出现偶数次

每个字符串可以看成一个长度为26 出现奇数次对应位置为1 偶数为0

就是求一些字符串 他们的异或为0

n最大为24

2^24超时

可以枚举前一半n/2所以的子集 存在map里

然后枚举后一半看是否有和它相同的 相同的异或就为0

枚举一半时间可以接受

#include <cstdio>
#include <cstring>
#include <map>
using namespace std;const int maxn = 30;
map <int, int> table;
int n, a[maxn];int bitcount(int x)
{return x == 0 ? 0 : bitcount(x/2) + (x&1);
}
int main()
{char s[1000];while(scanf("%d", &n) == 1 && n){for(int i = 0; i < n; i++){a[i] = 0;scanf("%s", s);for(int j = 0; s[j]; j++)a[i] ^= (1<<(s[j]-'A'));}int n1 = n/2;int n2 = n-n1;table.clear();for(int i = 0; i < (1<<n1); i++)//前半 枚举了所有n1个元素的子集 {int x = 0;for(int j = 0; j < n1; j++){if(i & (1<<j))x ^= a[j];}if(!table.count(x) || bitcount(table[x]) < bitcount(i))//bitcount求i的2进制中1的个数 table[x] = i;}int ans = 0;for(int i = 0; i < (1<<n2); i++){int x = 0;for(int j = 0; j < n2; j++){if(i & (1<<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 = 0; i < n; i++){if(ans & (1<<i))printf("%d ", i+1);}printf("\n");}return 0;
}


 

这篇关于LA 2965 Jurassic Remains / 中途相遇法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063408

相关文章

La-Z-Boy 标签制作注意事项

在制作标签之前,供应商需要通过EDI向La-Z-Boy发送提前发货通知(ASN)。ASN中的每个明细行将会至少对应一个运输编号(shipment ID),这个信息将会被体现在运输标签上,和标签上的条形码一起,用于La-Z-Boy收货。 供应商必须确保其装箱单以及发票中的信息能够对应上该批次货物的运输标签以及相关运输编号。供应商可以在La-Z-Boy提供的标签文档中,找到La-Z-Boy EDI部

【UVALive】2965 Jurassic Remains 中途相遇法

传送门:【UVALive】2965 Jurassic Remains 题目分析:本题用了一个很不错的思想——中途相遇法。 因为题目的数据很小,我们很容易想到暴力,但是2^24次方的枚举依旧复杂度太大,因此我们可以这么做:将一半的串枚举异或能得到的所有的值,插入到map中,然后再枚举异或另一半的串能得到的所有的值,然后查找map中的与这个值相同的有没有,更新一下能得到的最大数量即可。 成

Android 解决 No static method in class La/a/a/a; or its super classes

错误堆栈: Process: com.chaozh.iReader, PID: 24217java.lang.NoSuchMethodError: No static method getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; in class La/a/a/a; or its super

重生之我们在ES顶端相遇第11 章 - 深入自定义语言分词器

文章目录 0. 前言1. 英语分词器2. 阿拉伯语分词器3. 结语 0. 前言 国内企业出海是大势所趋,那么基于不同的语种进行分词就显得尤为重要,因为这会让用户的搜索体验更棒! 国内出海企业,会更偏向于选择欧美、中东这 2 个地区。 因此本文章也重点介绍英语、阿拉伯语的分词。 在 ES 中内置的分词器中,有一个叫 Language analyzers,我们可以根据该分词

重生之我们在ES顶端相遇第10 章- 分分分词器的基本使用

文章目录 思维导图0. 前言1. 光速上手1.1 指定分词器1.2 测试分词器 2. 分词流程(重要)2.1 基本介绍2.2 深入如何测试分词器 3. 自定义一个简单的分词器 思维导图 0. 前言 分词器在 ES 搜索使用中非常关键,一个好的分词器能够提高搜索的质量,让用户搜索到其想要的内容。 下面我将带大家从整体了解分词器。 1. 光速上手 1.1 指定分词器

qnx /var/log/la_gvm.txt 系统日志

qnx /var/log/la_gvm.txt 系统日志 /var/log/la_gvm.txt 是 QNX 操作系统中一个特定的日志文件,通常用于记录与 LA (Loadable Module) 或 GVM (Global Virtual Memory) 相关的信息。这个文件可以帮助系统管理员或开发者诊断与系统内存管理和模块加载相关的问题。 关键点解释: QNX: QNX 是一款实时操作系统

网络(Network,Seoul 2007,LA 3902)

题目地址:https://icpcarchive.ecs.baylor.edu/external/39/3902.html #include<iostream>#include<cstring>#include<vector>#include<algorithm>using namespace std;const int maxn=1000+10;vector<int> gr[ma

相遇在传智,梦想不再是孤独的旅行

相遇在传智,梦想不再是孤独的旅行     以下文章来自广州传智播客网页平面设计学院学员的感谢信——《相遇在传智,梦想不再是孤独的旅行》,广州传智播客专注平面UI设计培训,广州平面UI设计培训,广州平面设计,广州UI设计培训机构     那时,眼看着大三将至,意味着毕业在向自己一步一步地靠近,也意味着人生的又一个奋斗之旅即将要起航了,再想想自己在大学的两年里学到的东西,杂乱而不精

poj 2965 The Pilots Brothers' refrigerator——DFS(分类是枚举)

The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 17929 Accepted: 6794 Special Judge Description The game “The Pilots Brothers: following the s

(白书训练计划)UVa 1152 4 Values whose Sum is 0(中途相遇法。。)

题目地址:UVa 1152 先枚举A集合与B集合的和,存起来,然后再枚举C集合与D集合的和,看与存起来的值有多少个是互为相反数的。水题。找存起来的值时可以用二分找。 代码如下: #include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <m