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