【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]。
显然后者更容易优化,栗子。
这个由于算的顺序不同导致我走远的栗子不唯一。
这道题当时我算的方式跟正解不同,然后我化简化得很困难。
以后大概两种搜索方式都尝试一下吧。
转载于:https://www.cnblogs.com/hiweibolu/p/6714823.html
【JZOJ4910】【NOIP2017模拟12.3】子串相关推荐
- JZOJ 4910. 【NOIP2017模拟12.3】子串
Description Input Sample Input 4 5 ab abc zabc abcd zabcd 4 you lovinyou aboutlovinyou allaboutlovin ...
- JZOJ 4909. 【NOIP2017模拟12.3】李电下棋
Description Input Sample Input 4 2 1 2 3 1 2 4 2 4 6 2 4 Output Sample Output wfl lidian wfl lidian ...
- [2021.1.31多校省选模拟12]随机变换的子串(线段树维护分治/字符串/自动机思想)
[2021.1.31多校省选模拟12]随机变换的子串 对于这三种操作,我们惊奇地发现有这样的性质,所有长度大于4的字符串都可以通过变换变为长度小于等于4的字符串,那么查询本质不同的字符串我们只需要处理 ...
- JZOJ 4933. 【NOIP2017提高组模拟12.24】C
Description Input Sample Input 10 9 3580 8597 508 9110 9162 9973 6017 1942 989 646 1 3 4 405 4 3 5 5 ...
- JZOJ.5264【NOIP2017模拟8.12】化学
Description Input Output Sample Input 3 10 1 2 10 Sample Output 5 Data Constraint Hint 搜索.考虑到m很大,我们不 ...
- JZOJ 4932. 【NOIP2017提高组模拟12.24】B
Description 现在你有 NN 个数,分别为 A1,A2,-,ANA1,A2,-,AN ,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R)(L,保证 MaxAi−MinA ...
- JZOJ 4919. 【NOIP2017提高组模拟12.10】神炎皇
Description 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对 (a,b)(a,b),若满足 a+b<=na+b 且 a+ba+b 是 abab 的因子,则成为神奇的数对. ...
- 【NOIP2017提高组模拟12.10】神炎皇
题目 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 分析 设\(gcd(a,b)= ...
- 【JZOJ4920】【NOIP2017提高组模拟12.10】降雷皇
题目描述 降雷皇哈蒙很喜欢雷电,他想找到神奇的电光. 哈蒙有n条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的. 哈蒙想 ...
- wannafly 12 删除子串 dp
原文:https://www.cnblogs.com/genius777/p/8636661.html 删除子串 题目描述 给你一个长度为n且由a和b组成的字符串,你可以删除其中任意的部分(可以不删 ...
最新文章
- 二、应用层协议概述与HTTP
- 计算机里多媒体的名词解释,多媒体技术中的常见名词解释 众德伟业
- redis的学习使用,第四章
- cannot open layout editor - how to fix error message
- python databaselibrary_Robot Framework下DataBaseLibrary的使用
- 大数据笔试面试问题之分治法解决
- 判断目标主机和自己是否是一个子网的方法
- Linux线程编程之生产者消费者问题【转】
- 2021年软件质量事故盘点
- 裁员,缩招,冻结HC,程序员如何应对?
- NFT 推荐|Funguys 王国作品集第一弹
- 两台windows电脑互相备份
- linux 9 aml 设置wifi,aml常用命令.pdf
- 软件测试学习 之 Python 函数默认参数
- 什么是Web Service?[转]
- 阿里游戏市场分析师模拟题
- ADIS16470从到手到读出完整数据,附例程
- 每日新闻 | 科技部出台27条措施;中国联通加快5G建设
- java面试题3(转载)
- armeabi-v7a armeabi arm64-v8a 参数的含义解释