题目

分析

好吧。。。明显是暴力题。

首先,把A串分成只有小写字母组成的小分串,按顺序存放:A[1]、A[2]、A[3]……。

对于同构循环串,显然把两个B串合在一起,成为一个新的C串。\(C[i...i+m-1]\)(1<=i<=|B|)就是一个同构循环串。

接着设\(f[i][j]\)指在\(C[i+1...|C|]\)中第一个A[j]的位置,可以用kmp求出来。

然后就可以愉愉快快得暴力啦!

暴力:对于一个同构循环串\(C[i...i+|B|-1]\),设k=i-1,每次k调到下一个A的小分串的结尾(即k=f[k][j]+len[j]-1(当前做到的是第j个小分串)),当k>i+|B|-1,那么就是说在\(C[i...i+|B|-1]\)中没有对应的A串,break。

注意判断A串的开头结尾不是‘*’的情况。开头情况的:如果\(f[0][1]<>1\)就continue。结尾一样。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
using namespace std;
char sm[210000],sn[110][110];
int n,m,ans,tot,pos[110],len[110],tt,f[200500][102];
int next[110];
int kmp(int x)
{
memset(next,0,sizeof(next));
int j=0;
for(int i=2;i<=len[x];i++)
{
while(j>0 && sn[x][i]!=sn[x][j+1])
j=next[j];
if(sn[x][i]==sn[x][j+1])
j++;
next[i]=j;
}
j=0;
for(int i=1;i<=2*m;i++)
{
while(j>0 && sm[i]!=sn[x][j+1])
j=next[j];
if(sm[i]==sn[x][j+1])
j++;
if(j==len[x])
{
f[i-j+1-1][x]=i-j+1;
}
}
}
int main()
{
scanf("%s\n%s\n",sn[0]+1,sm+1);
n=strlen(sn[0]+1);
m=strlen(sm+1);
for(int i=1;i<=m;i++)
{
sm[m+i]=sm[i];
}
for(int i=1;i<=n;i++)
{
if(sn[0][i]!='*')
{
pos[++tot]=i;
len[tot]=0;
while(sn[0][len[tot]+1+pos[tot]-1]!='*' && len[tot]+1+pos[tot]-1<=n)
{
sn[tot][++len[tot]]=sn[0][len[tot]+pos[tot]-1];
}
i=len[tot]+pos[tot]-1;
}
}
for(int j=1;j<=tot;j++)
kmp(j);
for(int i=2*m;i>=0;i--)
{
for(int j=1;j<=tot;j++)
{
if(!f[i+1][j])
f[i+1][j]=maxlongint/5;
if(!f[i][j])
{
f[i][j]=f[i+1][j];
}
}
}
for(int i=1;i<=m;i++)
{
if(sn[0][1]!='*')
{
if(f[i-1][1]!=i) continue;
}
if(sn[0][n]!='*')
{
if(f[i+m-1-len[tot]+1-1][tot]!=i+m-1-len[tot]+1) continue;
}
int k=i-1;
for(int j=1;j<=tot;j++)
{
k=f[k][j]+len[j]-1;
if(k>i+m-1)
{
ans--;
break;
}
}
ans++;
}
printf("%d",ans);
}

【NOIP2013模拟】归途与征程的更多相关文章

  1. 【NOIP2013模拟】终极武器(经典分析+二分区间)

    No.2. [NOIP2013模拟]终极武器 题意: 给定你一些区间,然后让你找出\(1\sim 9\)中的等价类数字. 也就是说在任何一个区间里的任何一个数,把其中后\(k\)位中的某一位换成等价类 ...

  2. JZOJ 3493. 【NOIP2013模拟联考13】三角形

    3493. [NOIP2013模拟联考13]三角形(triangle) (File IO): input:triangle.in output:triangle.out Time Limits: 10 ...

  3. JZOJ 3487. 【NOIP2013模拟联考11】剑与魔法(dragons)

    3487. [NOIP2013模拟联考11]剑与魔法(dragons) (Standard IO) Time Limits: 1000 ms  Memory Limits: 131072 KB  De ...

  4. JZOJ 3470. 【NOIP2013模拟联考8】最短路(path)

    470. [NOIP2013模拟联考8]最短路(path) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  5. JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿

    3388. [NOIP2013模拟]绿豆蛙的归宿 (Standard IO) Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limi ...

  6. JZOJ 3463. 【NOIP2013模拟联考5】军训

    3463. [NOIP2013模拟联考5]军训(training) (Standard IO) Time Limits: 2000 ms  Memory Limits: 262144 KB  Deta ...

  7. JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)

    3462. [NOIP2013模拟联考5]休息(rest) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed ...

  8. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  9. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...

  10. JZOJ 3508. 【NOIP2013模拟11.5B组】好元素

    3508. [NOIP2013模拟11.5B组]好元素(good) (File IO): input:good.in output:good.out Time Limits: 2000 ms  Mem ...

随机推荐

  1. lua源码学习篇三:赋值表达式解析的流程

    上节说到表达式的解析问题,exprstate函数用于解析普通的赋值表达式.lua语言支持多变量赋值.本文先从单变量赋值表达式讲起. a = b = c = a + b 对于简单的两个数的求和过程,lu ...

  2. Linux_SELinux使用

    目录 目录 SELinux SElinux的应用 修改 SELinux 下次启动模式 修改 SELinux 上下文 上下文的快速模仿 SELinux布尔值 图形化管理SElinux SELinux错误 ...

  3. mybatis参数传参、取值处理等

    单个参数:mybatis不会做特殊处理 取值方式:#{参数名} 这里参数名不必与方法的形参名称一致,可以用任意参数名来接受实参 例子:方法:update(Integer id) sql映射文件取值#{ ...

  4. Spring的应用上下文ApplicationContext

    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes() ...

  5. python调用Java方法传入HashMap ArrayList

    1.Java代码: package com; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap ...

  6. 红帽学习笔记[RHCSA] 第四课[用户相关、破解root密码]

    第四课 关于Linux 的用户 用户分类: # UID 是用户ID ​ UID 0分配给超级用户(root) ​ UID 1-200 是一系列的 系统用户 静态分配给红帽的系统进程 ​ UID 201 ...

  7. RocketMQ高可用集群

    集群支持: RocketMQ天生对集群的支持非常友好 单Master: 优点:除了配置简单没什么优点 缺点:不可靠,该机器重启或宕机,将导致整个服务不可用 多Master: 优点:配置简单,性能最高 ...

  8. PostgreSQL dblink使用过程

    安装: 进入/root/postgresql-11.2/contrib/dblink make && make install 切换到postgres用户 [root@fce40690 ...

  9. CentOS下搭建docker+.net core

    运行环境: CentOS 7.0 容器:Docker 1.13.1 .Net Core版本: .NET Core 2.1,安装详见 CentOS 7 下安装.NET Core SDK 2.1 1.安装 ...

  10. 题解 CF1119A 【Ilya and a Colorful Walk】

    此题就是:给你一个数组,让你找出两个不同的元素,并让它们的下标差距最大. 思路:从2到n,如果与1不同,记录距离,与原数比较,取大. 从1到n-1,如果与n不同,记录距离,与原数比较,取大. AC代码 ...