【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将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和.然后对于每段的和,求 ... 
随机推荐
- python验证码识别PIL+pytesseract
			1.需要模块安装 在python安装目录scripts即: 执行pip install pillow 下载tesseract-ocr-setup-4.00.00dev.exe 安装,我的目录在C盘默认 ... 
- 469 Same Tree
			原题网址:https://www.lintcode.com/problem/same-tree/description 描述 检查两棵二叉树是否等价.等价的意思是说,首先两棵二叉树必须拥有相同的结构, ... 
- Java面试总结-基础篇2
			1. mvn的dependency-management dependency-management是声明依赖,不实际引入,主要用于在父依赖中统一各依赖的版本,否则,各个子模块在引用同一依赖时,难免会 ... 
- 1.开始Springboot 基本配置和helloworld
			1 pom.xml 首先引入两个xml节点 <!--这里面继承了springboot很多相关依赖--> <parent> <groupId>org.springfr ... 
- host ngnix zull
			1.浏览器解析域名:www.baidu.com 2.由本地host解析得到IP:127.0.0.1 3.向IP传递请求,IP所在PC的Ngnix监听80端口. 4.IP所以PC收到请求后,nginx由 ... 
- Java TimeUnit使用
			TimeUnit是java.util.concurrent包下面的一个类,表示给定单元粒度的时间段. 常用的颗粒度 TimeUnit.DAYS //天 TimeUnit.HOURS //小时 Time ... 
- 2019-8-30-BAT-脚本判断当前系统是-x86-还是-x64-系统
			title author date CreateTime categories BAT 脚本判断当前系统是 x86 还是 x64 系统 lindexi 2019-08-30 08:47:40 +080 ... 
- case expressions must be constant expressions
			As the error message states, the case expressions must be constant. The compiler builds this as a ve ... 
- mysql查询某个字段重复的数据
			查询某个字段重复的数据 ; 查询股票重复的营业厅 ; 
- spring JdbcTemplate最基本的使用
			package com.com.jdbctemplate; import org.springframework.jdbc.core.JdbcTemplate; import org.springfr ... 
