题目链接:http://hihocoder.com/problemset/problem/1829

        题意是在n个环形的(首尾相连)字符串中找最长公共子序列。

        在比赛的时候因为数据范围不大,想着去一个一个的暴力把每个串以每个字符为首字符的串都存起来然后去求他们的lcs,然后发现求n个字符串的lcs是没法往下传递的,所以就不会了...

        这道题其实和当时的思路是差不多的,就是去枚举每个字符串的子序列,但是不用去跑lcs,只需要把这些所有没出现过的子序列都存起来,如果某个子序列出现的个数是等于n的话就是这n个字符串的公共子序列了,然后再对这些存起来的子序列进行一个排序就好了。方法可以用dfs去暴力,这里我用的是二进制枚举,需要注意的是在二进制枚举完子序列后的那个if,是为了防止同一个字符串中出现多个相同的子序列的一个判重的操作,其他的不太难理解,主要是二进制枚举的操作。


AC代码:

#include <bits/stdc++.h>
using namespace std;
map<string,int> ma,vis;
vector<string> v;
int n,m;
bool flag;
string s,str,ch;bool cmp(string a,string b){if(a.length() == b.length())return a < b;return a.length() > b.length();
}void init(){ma.clear();v.clear();flag = false;m = n;
}void Fun(int x){string index = ch.substr(x);index += ch.substr(0,x);str = index;
}int main()
{while(~scanf("%d",&n)){init();while(m--){cin>>ch;vis.clear();int len = ch.length();for(int k=0;k<len;k++){Fun(k);for(int i=1;i<(1<<len);i++){      // 二进制枚举for(int j=0;j<len;j++){if(i & (1 << j)){s += str[j];}}if(vis[s] == 0){  // 判重ma[s] ++;vis[s] = 1;}s.clear();}}}for(auto i : ma){       // 遍历求公共子序列if(i.second == n){v.push_back(i.first);flag = true;}}sort(v.begin(),v.end(),cmp);if(flag == false){puts("0");}else{cout<<v[0]<<endl;}}return 0;
}

ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 B. Tomb Raider(二进制枚举)相关推荐

  1. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 【bfs + 记忆化搜索 + 剪枝】 AC 代码

    ACM 北京区域赛 bfs+剪枝+ms 第一个一遍过的题目,基本没有看题解 记忆搜索当中,注意初始化成一个特殊值:而在访问之后,每个点就会有一个不同于INF(或者 -1等特殊标记)的值 先到先得,适者 ...

  2. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 Tomb Raider(map+二进制枚举)

    #1829 : Tomb Raider 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, the fiercely independent daugh ...

  3. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(双向队列+尺取法)

    #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules ...

  4. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 D【队列】

    #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules ...

  5. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 D. 80 Days

    题解 题目大意 n个点组成一个环形 初始钱为m 从i走到j需要-b[i] + a[j] 要求按照顺时针走完所有的点(不用再回到起点) 过程中m不能小于0 输出最小的起点编号 直接把a[i]和b[i]合 ...

  6. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛

    Saving Tang Monk II Tomb Raider Cheat 80 Days Odd Chess Shortest Path Problem The Mole K-Dimensional ...

  7. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A Saving Tang Monk II【分层bfs】

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 <Journey to the West>(also <Monkey>) is one of the ...

  8. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A. Saving Tang Monk II

    题解 题目大意 给一个图S是起点 T是终点 .是空房间 #是毒气室 B是氧气瓶存放室 P是加速室 每次走到空房间或者起点消耗1秒 走到氧气室获得一个氧气瓶最多携带5个氧气瓶 进入毒气室需要一瓶氧气并且 ...

  9. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days ——尺取

    描述 80 Days is an interesting game based on Jules Verne's science fiction "Around the World in E ...

  10. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 C-cheat

    超级水的模拟的,我也就会做模拟了--坑有点多,一直没调出来bug,赛后才发现少了一个数字-- 描述 Cheat is a card game played by four players sittin ...

最新文章

  1. synchronized(二)
  2. Android中使用ContentProvider进行跨进程方法调用
  3. python中content的用法_学python吗,教你5个python现学现用的有趣用法
  4. 为什么高斯分布概率密度函数的积分等于1
  5. Android第一个程序截图,java – 在Android上截取屏幕截图
  6. ELF应用程序二进制接口
  7. 在 Docker 中使用 mysql 的一些技巧
  8. 5.7和5.6的mysql_mysql5.6与5.7版本的区别
  9. jfinal 一对一 实体类怎么写_新祥旭考研一对一:考前必知的四大答题技巧
  10. 数据质量管理十步流程
  11. PowerVR SDK编译环境的搭建
  12. 六种方法教你更好地使用小型WiFi摄像机
  13. Oracle to_date()函数的用法
  14. G1D45-与英文编辑沟通(cover letter、催稿一类)
  15. 15 《上帝之饮:六个瓶子里的历史》 -豆瓣评分7.5
  16. 小学数学与计算机整合课优质教案,小学数学优质课教案《长方形的面积》(通用5篇)...
  17. mysql 时间字符串 1_Mysql 中的日期时间字符串查询
  18. 宝,别踩我蜜罐了,可好?
  19. PhotonServer游戏服务器端(四)
  20. 1553B总线常见问题及解答

热门文章

  1. 电脑维修小知识(我抄的!)
  2. 2018第九届蓝桥杯B组决赛题解第四题 调手表
  3. Exif的Orientation信息说明
  4. 网络安全与渗透:sql注入,一文详解(九)此生无悔入华夏,男儿何不带吴钩
  5. linux 目录为空 删不掉,空文件夹删不掉怎么办 空文件夹删不掉解决方法
  6. 普渡大学计算机专业全美排名,美国普渡大学排名
  7. 老板要我开发一个OA多级审批流(干货满满)
  8. 矩阵变换应用-分块矩阵
  9. Internet选项里没有常规选项卡
  10. 软件工程笔记:SQA组织与职责