题面

题意:给你n个串,每个串都可以选择它的一个长度为n的环形子串(比如abcdf的就有abcdf,bcdfa,cdfab,dfabc,fabcd),求这个n个串的这些子串的最长公共子序列(每个串按顺序提出来字符,而这些字符并不一定要相邻)是什么(输出字典序最小的那个),没有就输出0

题解:看起来很难做,但实际上是10个串,每个串长度为8,也就是对于每个串也只有8个环形n子串,于是我们直接暴力枚举第一串的8种,与第二个串的8个依次求LCS

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char a[15][30],pat[30],ans_string[30];
 4 int len[30],ans,n;
 5 void solve(int length)
 6 {
 7     int start,limit,pat_len;
 8     int ok=1,flag=0;
 9     for (int i=1;i<n;i++)
10     {
11         pat_len=0;
12         flag=0;
13         for (int j=0;j<len[i];j++)
14             if (a[i][j]==pat[0])
15             {
16                 start=j+1;
17                 limit=j+len[i];
18                 pat_len=1;
19                 while (start<limit && pat_len<length)
20                 {
21                     if (a[i][start]==pat[pat_len]) pat_len++;
22                     start++;
23                 }
24                 if (pat_len==length)
25                 {
26                     flag=1;
27                     break;
28                 }
29             }
30         if (!flag)
31         {
32             ok=0;
33             break;
34         }
35     }
36     if (ok)
37     {
38         if (length > ans || ((ans==length) && (strcmp(pat,ans_string)<0) ))
39         {
40             ans=length;
41             for (int i=0;i<ans;i++) ans_string[i] = pat[i];
42             ans_string[ans] = '\0';
43         }
44     }
45 }
46 void dfs(int k,int last,int limit)
47 {
48     solve(k);
49     for (int i=last+1;i<limit;i++)
50     {
51         pat[k]=a[0][i];
52         pat[k+1]='\0';
53         dfs(k+1,i,limit);
54     }
55     return;
56 }
57 int main()
58 {
59     while (scanf("%d",&n)!=EOF)
60     {
61         ans=0;
62         for (int i=0;i<n;i++)
63         {
64             scanf("%s",a[i]);
65             len[i]=strlen(a[i]);
66         }
67         for (int j=0;j<n;j++)
68         {
69             for (int i=0;i<len[j];i++) a[j][i+len[j]]=a[j][i];
70             a[j][len[j]*2]='\0';
71         }
72         for (int i=0;i<len[0];i++)
73         {
74             pat[0]=a[0][i];
75             pat[1]='\0';
76             dfs(1,i,i+len[0]);
77         }
78         if (ans>0) printf("%s\n", ans_string); else printf("0\n");
79     }
80 }

转载于:https://www.cnblogs.com/qywhy/p/9694462.html

hihoCoder-1829 2018亚洲区预选赛北京赛站网络赛 B.Tomb Raider 暴力 字符串相关推荐

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

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

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

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

  3. hihoCoder-1830 2018亚洲区预选赛北京赛站网络赛 C.Cheat 模拟

    题面 题意:4个人围一圈坐着,每个人13张牌,然后从第一个人开始,必须按照A-K的顺序出牌,一个人出牌后,剩下的人依次可以选择是否质疑他,例如,第一个人现在必须出8(因为按照A-K顺序轮到了),可是他 ...

  4. hihoCoder-1828 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS

    题面 题意:N*M的网格图里,有起点S,终点T,然后有'.'表示一般房间,'#'表示毒气房间,进入毒气房间要消耗一个氧气瓶,而且要多停留一分钟,'B'表示放氧气瓶的房间,每次进入可以获得一个氧气瓶,最 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. React Button 使用onClick 定义 antd 登录页面
  2. (转)海量数据面试题集锦
  3. 浅谈web前端理解一(前端学习路线)
  4. 2017.4.5 假期的宿舍 思考记录
  5. jumpserver堡垒机 (资源)
  6. ali 媒体转码签名生成-php
  7. php symfony2 laravel4 比较,LARAVEL4、Phalcon、Symfony2的优缺点?
  8. 淘宝(taobao)HSF框架
  9. 9月,重磅推出Linux、数据结构、领域驱动等10本程序员新书
  10. 响应式与自适应设计:设计师的最佳选择是什么?
  11. linux嵌入式开发位置,RedHat 系列 Linux 安装后,建立嵌入式开发环境
  12. 三星android5.0 蓝牙,蓝牙5.0手机有哪些 蓝牙5.0和4.2的区别是什么【区别介绍】
  13. linux中给普通用户添加root用户权限
  14. 数学名词:调和平均数
  15. matlab坐标污染物浓度,基于MATLAB城市空气质量评价体系.doc
  16. 花王洁霸洗衣粉能洗干净衬衣领子
  17. 东北计算机考研难度性价比,全国211院校考研难度分析,建议收藏!(详细版)...
  18. Nand Flash简介-2
  19. python selenium 处理弹窗_python 让selenium(webdriver ) 不打开浏览器(弹出窗口)运行(静默模式启动)...
  20. 2021年T电梯修理考试及T电梯修理考试报名

热门文章

  1. create-react-app留言板
  2. HDU2568 前进【水题】
  3. mySQL Slow Query Log Rotation(慢查询日志轮循设置)
  4. Sql Server函数全解三数据类型转换函数和文本图像函数
  5. 使用HtmlHelper 写自己的 mvc 分页
  6. itoa函数的实现(不同进制)
  7. 给力开源,.Net开源地址大收集
  8. ZTE EPON新添加终端设备数据配置
  9. 第三期 预测——Frenet 坐标
  10. Mysql 递归获取多重数组数据