题目

分析

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

首先,把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. Jmeter之检查点

    检查点 Jmeter中检查点也叫断言,Jmeter中有很多类型的断言,但是最常用的是响应断言,即根据服务器返回的结果来判断测试是否通过. 响应断言 添加断言结果用于运行完毕后查看结果 测试通过 测试不 ...

  2. delphi将程序最小化至右下角

    程序新手,如果有不恰当的地方,请大家帮忙改正! 1.下载并安装Raize.v5.5控件,delphi版本为:delphi 7.0. 2.添加RzTrayIcon控件.PopupMenu控件至窗体上. ...

  3. Java ——多线程编程

    本节重点思维导图 多线程编程

  4. CNN文本分类

    CNN用于文本分类本就是一个不完美的解决方案,因为CNN要求输入都是一定长度的,而对于文本分类问题,文本序列是不定长的,RNN可以完美解决序列不定长问题, 因为RNN不要求输入是一定长度的.那么对于C ...

  5. 应用安全 - Web安全 - 远程控制管理工具 - 汇总

    菜刀 蚁剑 冰蝎 DarkCommet ADT windows/upexec/reverse_tcp set PEXEC xxx

  6. 【Qt开发】V4L2 API详解 Buffer的准备和数据读取

    前面主要介绍的是:V4L2 的一些设置接口,如亮度,饱和度,曝光时间,帧数,增益,白平衡等.今天看看V4L2 得到数据的几个关键ioctl,Buffer的申请和数据的抓取. 1. 初始化 Memory ...

  7. Eclipse."Courier New"字体

    1.Win 7 下eclipse添加Courier New字体 - 彦帅的博客.html(https://blog.csdn.net/theblackbeard/article/details/525 ...

  8. Redis为什么不能使用一主一从哨兵

    哨兵机制 识别挂掉的主节点 quorum(法定人数) 是判定主节点不能访问所需要的最少哨兵数量 执行失效备援perform a failover 其中一个哨兵需要被选为救援的领导,并被授权执行救援,而 ...

  9. Xpath素材

    from lxml import etree text = """ <div> <ul> <li class="item-0&qu ...

  10. [转帖]深入理解 MySQL—锁、事务与并发控制

    深入理解 MySQL—锁.事务与并发控制 http://www.itpub.net/2019/04/28/1723/ 跟oracle也类似 其实所有的数据库都有相同的机制.. 学习了机制才能够更好的工 ...