题面

题意:给你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. 【Qt】QTest:编译Qt单元测试程序
  2. LeetCode 144. Binary Tree Preorder Traversal--二叉树前序遍历--反向压栈--迭代-栈,递归--C++,Python解法
  3. 本地如何预览php文件上传,如何实现js上传图片本地预览同时支持预览截图的功能...
  4. JFreeChart插件使用
  5. myisam数据表根据frm文件恢复数据表
  6. 用手机写代码:基于 Serverless 的在线编程能力探索
  7. ensp删除所有命令_HCIA学习笔记——eNSP配置NAT技术
  8. 都在夸官方文档 Vue.js 2021 年度报告出炉!
  9. Ubuntu下在Apache中运行Keystone
  10. PHP 实现实时通信一般有两种方式
  11. 基于tetgen对曲面分隔的box区域做限定四面体剖分
  12. 【价格预测】基于matlab粒子群算法黄金价格预测【含Matlab源码 591期】
  13. git 报错did not match any file(s) known to git
  14. log2n怎么算计算机公式,log函数运算公式是什么
  15. 灌篮高手全国大赛漫画 (23-31卷) + 十日后
  16. 鹤林全集·闲情志友 | 第一篇——阿鑫
  17. 实战篇-OpenSSL之AES加密算法-ECB模式
  18. 8.7 Meta learning元学习全面理解、MAML、Reptile
  19. 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(三)-移植到ESP32平台(1)
  20. Promise.all等待方法执行完毕再执行

热门文章

  1. 多线程:为什么不能override start方法
  2. maven实现依赖的“全局排除”
  3. winpcap的环境配置
  4. Python 编写一个有道翻译的 workflow 教程
  5. Python3学习笔记----环境安装及文本编辑器的选择
  6. IntelliJ IDEA 环境常用设置整理
  7. 14条建议 使你的IT职业生涯更上一层楼
  8. cygwin下安装软件
  9. Java中文编码小结
  10. Pydev 找不到新安装的 Python egg 解决方法