【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将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和.然后对于每段的和,求 ...
随机推荐
- 使用DynamoShake从dynamodb迁移到mongodb
去年和今年年初,我们开源了MongoShake和RedisShake分别用于MongoDB和Redis的迁移.同步.备份等多种需求.最近,我们的shake系列又进一步壮大,我们推出了一款dynamod ...
- Django项目:CMDB(服务器硬件资产自动采集系统)--06--06CMDB测试Linux系统采集硬件数据的命令01
#base.py # ————————01CMDB获取服务器基本信息———————— from config import settings #配置文件 class BasePlugin(object ...
- Tuxera ntfs软件如何删除干净
sudo /Library/Filesystems/fusefs_txantfs.fs/Contents/Resources/Support/uninstall-package.sh
- light oj 1219 树上贪心
#include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...
- EPSG、SRID、WKT的概念
转自:http://www.cnblogs.com/jackdong/archive/2010/12/20/1911558.html EPSG:European Petroleum Survey Gr ...
- MyBatis配置文件(七)--environments运行环境
一.environments配置信息: environments的作用是用来配置数据库信息,可以配置多个,其有两个可配的子元素,分别是:事务管理器transactionManager和数据源dataS ...
- PAT甲级——A1033 To Fill or Not to Fill
With highways available, driving a car from Hangzhou to any other city is easy. But since the tank c ...
- DES、RSA、MD5、SHA、随机生成加密与解密
一.数据加密/编码算法列表 常见用于保证安全的加密或编码算法如下: 1.常用密钥算法 密钥算法用来对敏感数据.摘要.签名等信息进行加密,常用的密钥算法包括: DES(Data Encr ...
- TZOJ 1503 Incredible Cows(折半搜索+二分)
描述 Farmer John is well known for his great cows. Recently, the cows have decided to participate in t ...
- netbeans调试webapp 只能用localhost访问
etbeans 我的电脑是192.168.0.2,用这个地址访问 网上有人说,分两种情况 此问题分两种情况: 1. 可以用127.0.0.1访问 2. 不能用127.0.0.1访问 针对第一种情况,我 ...