【UVALive】2965 Jurassic Remains 中途相遇法

2024-09-05 15:18

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

传送门:【UVALive】2965 Jurassic Remains


题目分析:本题用了一个很不错的思想——中途相遇法。

因为题目的数据很小,我们很容易想到暴力,但是2^24次方的枚举依旧复杂度太大,因此我们可以这么做:将一半的串枚举异或能得到的所有的值,插入到map中,然后再枚举异或另一半的串能得到的所有的值,然后查找map中的与这个值相同的有没有,更新一下能得到的最大数量即可。

成功将复杂度降低了一大半。

也算是一个蛮重要的思想吧


代码如下:


#include <map>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;#define REP( i , a , b ) for ( int i = a ; i < b ; ++ i )
#define FOR( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REV( i , a , b ) for ( int i = a ; i >= b ; -- i )
#define CLR( a , x ) memset ( a , x , sizeof a )const int MAXN = 30 ;
const int MAXM = 10005 ;map < int , int > mp ;
int a[MAXN] ;
int n ;
int cnt[MAXM] ;
char s[MAXM] ;int count ( int x ) {int res = 0 ;while ( x ) {if ( x & 1 )++ res ;x >>= 1 ;}return res ;
}void insert ( int key , int value ) {map < int , int > :: iterator it = mp.find ( key ) ;if ( it == mp.end () )mp.insert ( map < int , int > :: value_type ( key , value ) ) ;else if ( cnt[it -> second] < cnt[value] )it -> second = value ;
}void solve () {mp.clear () ;CLR ( a , 0 ) ;REP ( i , 0 , n ) {scanf ( "%s" , s ) ;for ( int j = 0 ; j < s[j] ; ++ j )a[i] ^= ( 1 << ( s[j] - 'A' ) ) ;}int nn = n / 2  , m = ( 1 << nn ) ;REP ( S , 0 , m ) {int key = 0 ;REP ( i , 0 , nn )if ( S & ( 1 << i ) )key ^= a[i] ;insert ( key , S ) ;}m = ( 1 << ( n - nn ) ) ;int ans = 0 ;int buf = 0 ;REP ( S , 0 , m ) {int key = 0 ;REP ( i , 0 , n - nn )if ( S & ( 1 << i ) )key ^= a[i + nn] ;map < int , int > :: iterator it = mp.find ( key ) ;if ( it != mp.end () ) {int tmp = cnt[S] + cnt[it -> second] ;int value = ( S << nn ) | ( it -> second ) ;if ( tmp > ans ) {ans = tmp ;buf = value ;}}}int flag = 0 ;printf ( "%d\n" , ans ) ;REP ( i , 0 , n )if ( buf & ( 1 << i ) ) {if ( flag )printf ( " " ) ;flag = 1 ;printf ( "%d" , i + 1 ) ;}printf ( "\n" ) ;
}int main () {REP ( i , 0 , MAXM )cnt[i] = count ( i ) ;while ( ~scanf ( "%d" , &n ) )solve () ;return 0 ;
}


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



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

相关文章

【UVALive】6709 Mosaic 二维线段树

传送门:【UVALive】6709 Mosaic 题目大意: 每次选择矩阵中的一个点,求以他为中心,边长为D(D一定是奇数)的矩阵中的最小值min和最大值max,输出ans =(min+max)/ 2(向下取整)。然后将该点的值修改为ans。 题目分析: 赤果果的二维线段树单点修改、区间查询。 又一次学习了线段树,发现原来所有的更新操作全部放在二维中即可。 很不错,一定要经常看看,温

【UVALive】3887 Slim Span 枚举+最小生成树

传送门:【UVALive】3887 Slim Span 题目大意:给出一个n(2 <= n <= 100)个结点的无向图,找一棵苗条度(最大边减最小边的值)最小的生成树。图中不含自环或重边。 题目分析:枚举最小边求生成树即可。模板用用萌萌哒~ 代码如下: #include <cstdio>#include <cstring>#include <algorit

【UVALive】5713 Qin Shi Huang's National Road System 最小生成树

传送门:【UVALive】5713 Qin Shi Huang's National Road System 题目大意:秦朝有n个城市,需要修建一些道路使得任意两个城市之间都可以连通。道士徐福声称他可以用法术修路,不花钱,也不用劳动力,但只能修一条路,因此需要慎重选择用法术修哪一条路。秦始皇不仅希望其他道路的总长度B尽量短(这样可以节省劳动力),还希望法术连接的两个城市的人口之和A尽量大,因此下

【UVALive】3661 Animal Run 平面图最小割 最短路

传送门:【UVALive】3661 Animal Run 题目大意:给你一个n*m个点的网格图,其中动物园在左上角,动物们的目的地在右下角,现在你需要派出一些工作人员拦截某些边使得没有一只动物能到达右下角,已知每个单元网格中存在左上角到右下角的对角线,网格中的边以及对角线都是双向的,每条道路有个权值,表示拦截这条边所需要的工作人员数。你的任务是派尽量少的工作人员使得达到目的。 题目分析

【UVALive】6163 Myth Busters 类24点

传送门:【UVALive】6163 Myth Busters 题目分析: 可以使用括号,还有加减乘除,问能否用四个0~9的数凑出10。。。我了个去。。渣渣不会写拿来当模拟写了,写的人都要吐了。。。。 先处理出所有两个数和起来的情况,然后用两个数和起来的情况再加上一个数处理出所有三个数和起来的情况,最后用两个两个数或者一个三个数加一个数的继续推出四个数的,最后按照不降序保存。 这个能一

UVALive 4255 Guess

题意: 给你半个矩阵  如果(i,j)的位置是'-'  则说明sum[i...j]<0  如果是'+'  说明sum>0  如果是'0'  说明sum=0  给出一种满足这个矩阵的序列  序列元素绝对值在10以内 思路: 很容易想到的是将sum[i...j]转化为sum[j]-sum[i-1]  即用前缀和来表示  那么题中的矩阵就可以转化成前缀和之间的大小比较  也就是说  我们可以通过

重生之我们在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 指定分词器

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

相遇在传智,梦想不再是孤独的旅行     以下文章来自广州传智播客网页平面设计学院学员的感谢信——《相遇在传智,梦想不再是孤独的旅行》,广州传智播客专注平面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