hihoCoder-1829 2018亚洲区预选赛北京赛站网络赛 B.Tomb Raider 暴力 字符串
题面
题意:给你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 暴力 字符串相关推荐
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 Tomb Raider(map+二进制枚举)
#1829 : Tomb Raider 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, the fiercely independent daugh ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 【bfs + 记忆化搜索 + 剪枝】 AC 代码
ACM 北京区域赛 bfs+剪枝+ms 第一个一遍过的题目,基本没有看题解 记忆搜索当中,注意初始化成一个特殊值:而在访问之后,每个点就会有一个不同于INF(或者 -1等特殊标记)的值 先到先得,适者 ...
- hihoCoder-1830 2018亚洲区预选赛北京赛站网络赛 C.Cheat 模拟
题面 题意:4个人围一圈坐着,每个人13张牌,然后从第一个人开始,必须按照A-K的顺序出牌,一个人出牌后,剩下的人依次可以选择是否质疑他,例如,第一个人现在必须出8(因为按照A-K顺序轮到了),可是他 ...
- hihoCoder-1828 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS
题面 题意:N*M的网格图里,有起点S,终点T,然后有'.'表示一般房间,'#'表示毒气房间,进入毒气房间要消耗一个氧气瓶,而且要多停留一分钟,'B'表示放氧气瓶的房间,每次进入可以获得一个氧气瓶,最 ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(双向队列+尺取法)
#1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 D【队列】
#1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 D. 80 Days
题解 题目大意 n个点组成一个环形 初始钱为m 从i走到j需要-b[i] + a[j] 要求按照顺时针走完所有的点(不用再回到起点) 过程中m不能小于0 输出最小的起点编号 直接把a[i]和b[i]合 ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛
Saving Tang Monk II Tomb Raider Cheat 80 Days Odd Chess Shortest Path Problem The Mole K-Dimensional ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A Saving Tang Monk II【分层bfs】
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 <Journey to the West>(also <Monkey>) is one of the ...
最新文章
- 【Qt】QTest:编译Qt单元测试程序
- LeetCode 144. Binary Tree Preorder Traversal--二叉树前序遍历--反向压栈--迭代-栈,递归--C++,Python解法
- 本地如何预览php文件上传,如何实现js上传图片本地预览同时支持预览截图的功能...
- JFreeChart插件使用
- myisam数据表根据frm文件恢复数据表
- 用手机写代码:基于 Serverless 的在线编程能力探索
- ensp删除所有命令_HCIA学习笔记——eNSP配置NAT技术
- 都在夸官方文档 Vue.js 2021 年度报告出炉!
- Ubuntu下在Apache中运行Keystone
- PHP 实现实时通信一般有两种方式
- 基于tetgen对曲面分隔的box区域做限定四面体剖分
- 【价格预测】基于matlab粒子群算法黄金价格预测【含Matlab源码 591期】
- git 报错did not match any file(s) known to git
- log2n怎么算计算机公式,log函数运算公式是什么
- 灌篮高手全国大赛漫画 (23-31卷) + 十日后
- 鹤林全集·闲情志友 | 第一篇——阿鑫
- 实战篇-OpenSSL之AES加密算法-ECB模式
- 8.7 Meta learning元学习全面理解、MAML、Reptile
- 基于芯科Host-NCP解决方案的Zigbee 3.0 Gateway技术研究(三)-移植到ESP32平台(1)
- Promise.all等待方法执行完毕再执行