【JZOJ4910】【NOIP2017模拟12.3】子串
题目描述
数据范围
=w=
暴力:
从前往后枚举一个i,再从前往后枚举一个j:
如果s[i]不是s[j]的子串,更新答案,继续枚举;
如果s[i]是s[j]的子串,停止枚举。
因为对于s[k] (k>j),s[i]如果不是s[k]的子串,那么s[j]也不是s[k]的子串。
代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define ll long long
using namespace std;
const char* fin="sub.in";
const char* fout="sub.out";
const int inf=0x7fffffff;
const int maxn=507,maxlen=2007;
int t,n,i,j,k,p,ans;
char s[maxn][maxlen];
int len[maxn],fail[maxn][maxlen];
bool judge(int a,int b){
int i,j,k,p=0;
for (i=1;i<=len[b];i++){
while (p && s[a][p+1]!=s[b][i]) p=fail[a][p];
if (s[a][p+1]==s[b][i]) p++;
if (p==len[a]) return true;
}
return false;
}
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d",&t);
while (t--){
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%s",s[i]+1);
for (i=1;i<=n;i++){
len[i]=strlen(s[i]+1);
p=0;
for (j=2;j<=len[i];j++){
while (p && s[i][p+1]!=s[i][j]) p=fail[i][p];
if (s[i][p+1]==s[i][j]) p++;
fail[i][j]=p;
}
}
ans=0;
for (i=1;i<=n;i++){
for (j=max(ans,i+1);j<=n;j++)
if (judge(i,j)) break;
else ans=j;
}
if (ans) printf("%d\n",ans);
else printf("-1\n");
}
return 0;
}
=o=
我的暴力和正解的区别:
正解:枚举i,然后处理所有i对其他人的贡献①;
我:枚举i,然后处理所有其他人对i的贡献②。
两种都显然正确;
但是区别是有的,前者可能会更容易优化。
类比动态规划:
对于两个等价的方程:
f[1..i−1]⇒f[i],以及f[i−1]⇒f[i]。
显然后者更容易优化,栗子。
这个由于算的顺序不同导致我走远的栗子不唯一。
这道题当时我算的方式跟正解不同,然后我化简化得很困难。
以后大概两种搜索方式都尝试一下吧。
【JZOJ4910】【NOIP2017模拟12.3】子串的更多相关文章
- 【NOIP2017模拟12.3】子串
题目 分析 对于当前枚举串 \(now\),从前往后扫.若扫到 \(i\),\(s_i\) 是 ; \(s_j\) 的子串 \((i < j < now)\),我们就可以跳过不匹配 \(i ...
- JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨
5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...
- JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计
5230. [NOIP2017模拟A组模拟8.5]队伍统计 (File IO): input:count.in output:count.out Time Limits: 1500 ms Memory ...
- JZOJ 5246. 【NOIP2017模拟8.8A组】Trip(trip)
5246. [NOIP2017模拟8.8A组]Trip(trip) (File IO): input:trip.in output:trip.out Time Limits: 1500 ms Memo ...
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...
- noip模拟12[简单的区间·简单的玄学·简单的填数]
noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...
- JZOJ.5264【NOIP2017模拟8.12】化学
Description
- 【NOIP2017提高组模拟12.24】B
题目 现在你有N个数,分别为A1,A2,-,AN,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R),保证Max{Ai}-Min{Ai}<=R-L,你需要找出并输出最小的K( ...
- 【NOIP2017提高组模拟12.17】环
题目 小A有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字.对于一个切分方案,小A将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和.然后对于每段的和,求 ...
随机推荐
- 最全Kubernetes审计日志方案
前言 当前Kubernetes(K8S)已经成为事实上的容器编排标准,大家关注的重点也不再是最新发布的功能.稳定性提升等,正如Kubernetes项目创始人和维护者谈到,Kubernetes已经不再是 ...
- html常用标签详解3-a标签
a标签 1.a标签的属性 a标签属于行内元素标签,双标签<a></a> href:a标签的跳转地址 target:打开方式(_self自身:_blank:新窗口) title: ...
- Python3.5 安装 & hello world
1.下载安装python https://www.python.org/downloads/release/python-364/ 2.安装成功运行 python shell 3.或者cmd => ...
- vue.js_10_vue的路由
1.vue-router的基本使用 1>安装vue-rouder路由模块 <script src="js/vue-2.4.0.js"></script> ...
- linear-gradient
http://jsbin.com/mocojehosa/edit?html,css,output https://developer.mozilla.org/zh-CN/docs/Web/CSS/li ...
- Django REST Framework概述
什么是REST REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”.这里说的表征性,就是指资源,通 ...
- Chapter 1 线性表
Preface: 这部分主要是我考研之前的总结,留作以后用到时再翻出来看看.都是基础的知识点,望各(Da)位(Lao)不喜勿喷,欢迎指正. 适用人群:考研复习过一遍数据结构的,可以看看,查漏补缺(顺便 ...
- day18 8.jdbc中设置事务隔离级别
设置数据库事务隔离级别特殊需求才有,后面很少用.因为数据库本身是事务隔离级别的,mysql的事务隔离级别是Repeatable read,可以解决脏读和不可重复读.不用设置,人家数据库是有事务隔离级别 ...
- there is no permission with id `12`
Laravel 本地环境添加菜单之后, 线上报错, 线上线上用同一个数据库, 原因是缓存问题, 解决方法: php artisan cache:clear 如果缓存有重要数据的, 那就要清除对应的缓存 ...
- 字符界面总是显示 login incorrect
一般来说出现这样的提示,是因为登陆的密码错误,如果密码中有数字,最好用主键盘输入,用数字键盘会有错误.