博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Bazinga HDU - 5510 】【考察strstr()的使用】【贪心】
阅读量:4966 次
发布时间:2019-06-12

本文共 1391 字,大约阅读时间需要 4 分钟。

题意分析

1.题目大致说的是让你输出符合这种条件(在所给的字符串中至少有一个不是它的子串)的字符串对应的label,若没有输出-1;

2.判断子串可以用string.h下的strstr(s1, s2)函数,若s2 是s1的子串则返回在s1中s2首字母对应的地址,若不是则返回NULL,想进一步了解strstr可访问 ;
3.如果只是暴力比较两个字符串是否某个是某个的子串时会超时,还需进一步优化;
4.设那个符合条件的初始位置maxx=-1,可以从最后一个字符串开始遍历(因为它最长,越在后面的越有可能符合条件),比较相邻的两个字符串,若短的是长的子串,则继续遍历,否则即短的不是长的子串时,可以更新maxx了,不过还没完,再进行进一步的判断;
5.既然该串符合条件,那么位于它后面的串中倘若有的包含它,并且在位于它之前的字符串中含有不属于它的串,这样maxx就可以更大了,详细情况见AC代码。

AC代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn = 2000 + 10;char s[500+10][maxn];int T, n;int main(){ // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); scanf("%d", &T); for(int t = 1; t <= T; t++) { scanf("%d", &n); memset(s, 0, sizeof(s)); for(int i = 1; i <= n; i++) scanf("%s", s[i]); int maxx = -1; int ff = 0; for(int i = n; i >= 2; i--) { if(strstr(s[i], s[i-1]) == NULL) //短的不是长的子串,符合条件 { maxx = max(maxx, i); for(int j = i + 1; j <= n; j++) { if(strstr(s[j], s[i]) != NULL) //试图寻找更大位置的符合条件的串 { int flag = 0; for(int k = i; k >= 1; k--) { if(strstr(s[j], s[k]) == NULL) { flag = 1; break; } } if(flag) maxx = max(maxx, j); else { ff = 1; break; } } } } if(ff) break; } printf("Case #%d: %d\n", t, maxx); }}

转载于:https://www.cnblogs.com/KeepZ/p/11470477.html

你可能感兴趣的文章
关于Mysql数据库查询数据大小写的问题汇总
查看>>
!HDU 2602 Bone Collector--DP--(裸01背包)
查看>>
Android测试(四)——内容供应器泄露
查看>>
HTML5学习路线资料,HTML5前端面试的技术栈
查看>>
letecode [532] - K-diff Pairs in an Array 解法优-时间复杂度O(nlogn),空间O(1)
查看>>
sqlce wp
查看>>
数据结构线性表的经典笔试面试题
查看>>
前端自动化构建工具 Webpack——3 webpack配置文件的使用
查看>>
t4模板的认识
查看>>
XShell命令行使用
查看>>
jQuery设置和获取HTML、文本和值
查看>>
国内著名黑客信息
查看>>
Celery 分布式任务队列快速入门
查看>>
head标签
查看>>
08.存储Cinder→5.场景学习→03.Attach Volume→2.实际操作
查看>>
R语言学习 - 线图绘制
查看>>
eos超时 锁表问题 网友办法
查看>>
Python学习笔记8(2)——序列的方法
查看>>
P3084 [USACO13OPEN]照片Photo
查看>>
matlab读取cvs文件的几种方法
查看>>