题目描述

数据范围

=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】子串相关推荐

  1. JZOJ 4910. 【NOIP2017模拟12.3】子串

    Description Input Sample Input 4 5 ab abc zabc abcd zabcd 4 you lovinyou aboutlovinyou allaboutlovin ...

  2. 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 ...

  3. [2021.1.31多校省选模拟12]随机变换的子串(线段树维护分治/字符串/自动机思想)

    [2021.1.31多校省选模拟12]随机变换的子串 对于这三种操作,我们惊奇地发现有这样的性质,所有长度大于4的字符串都可以通过变换变为长度小于等于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 ...

  5. JZOJ.5264【NOIP2017模拟8.12】化学

    Description Input Output Sample Input 3 10 1 2 10 Sample Output 5 Data Constraint Hint 搜索.考虑到m很大,我们不 ...

  6. JZOJ 4932. 【NOIP2017提高组模拟12.24】B

    Description 现在你有 NN 个数,分别为 A1,A2,-,ANA1,A2,-,AN ,现在有M组询问需要你回答.每个询问将会给你一个L和R(L<=R)(L,保证 MaxAi−MinA ...

  7. JZOJ 4919. 【NOIP2017提高组模拟12.10】神炎皇

    Description 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对 (a,b)(a,b),若满足 a+b<=na+b 且 a+ba+b 是 abab 的因子,则成为神奇的数对. ...

  8. 【NOIP2017提高组模拟12.10】神炎皇

    题目 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 分析 设\(gcd(a,b)= ...

  9. 【JZOJ4920】【NOIP2017提高组模拟12.10】降雷皇

    题目描述 降雷皇哈蒙很喜欢雷电,他想找到神奇的电光. 哈蒙有n条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的. 哈蒙想 ...

  10. wannafly 12 删除子串 dp

    原文:https://www.cnblogs.com/genius777/p/8636661.html 删除子串 题目描述  给你一个长度为n且由a和b组成的字符串,你可以删除其中任意的部分(可以不删 ...

最新文章

  1. 二、应用层协议概述与HTTP
  2. 计算机里多媒体的名词解释,多媒体技术中的常见名词解释 众德伟业
  3. redis的学习使用,第四章
  4. cannot open layout editor - how to fix error message
  5. python databaselibrary_Robot Framework下DataBaseLibrary的使用
  6. 大数据笔试面试问题之分治法解决
  7. 判断目标主机和自己是否是一个子网的方法
  8. Linux线程编程之生产者消费者问题【转】
  9. 2021年软件质量事故盘点
  10. 裁员,缩招,冻结HC,程序员如何应对?
  11. NFT 推荐|Funguys 王国作品集第一弹
  12. 两台windows电脑互相备份
  13. linux 9 aml 设置wifi,aml常用命令.pdf
  14. 软件测试学习 之 Python 函数默认参数
  15. 什么是Web Service?[转]
  16. 阿里游戏市场分析师模拟题
  17. ADIS16470从到手到读出完整数据,附例程
  18. 每日新闻 | 科技部出台27条措施;中国联通加快5G建设
  19. java面试题3(转载)
  20. armeabi-v7a armeabi arm64-v8a 参数的含义解释

热门文章

  1. 关于计算机航天生物的想像作文,未来的航天员想象作文
  2. python组合数据类型包括_第六周 python组合数据类型
  3. vue 如何清除浏览器的内存_浏览器垃圾回收机制与 Vue 项目内存泄漏场景分析
  4. java i 原理_Java I/O模型及其底层原理
  5. Python,入门1
  6. 智能家居规模发展尚需时日
  7. 关于DOS和命令行的故事
  8. HP大中华区总裁退休感言(孙振耀 )
  9. 关于EXCEL操作的问题
  10. 1.9 Important Themes(一些重要的概念)