Live2D

(暴力碾标算)NOIP模拟赛 宗教仪式

题意:

一个模式串,一个文本串,现定义最大失配值为k

求文本中最大失配值<=k的长度为len(模式串)的字串个数

失配值=当前字串中与模式串不同的字符个数

思路:

暴力,加一个跳出剪枝,居然过了??

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define rii register int i
#define rij register int j
using namespace std;
char x[1000005],y[1000005];
int next[1000005],cd1,cd2,sl,k,cnt;
int main()
{
    freopen("mo.in","r",stdin);
    freopen("mo.out","w",stdout);
    scanf("%s%s",x+1,y+1);
    scanf("%d",&k);
    cd1=strlen(x+1);
    cd2=strlen(y+1);
    int zq=cd2-k;
    for(rii=1;i<=cd1-cd2+1;i++)
    {
        int r=0,w=0;
        for(rij=1;j<=cd2;j++)
        {
            if(x[i+j-1]==y[j])
            {
                r++;
            }
            else
            {
                w++;
            }
            if(w>k)
            {
                break;
            }
            if(r>zq)
            {
                break;
            }
        }
        if(w<=k)
        {
            cnt++;
        }
    }
    printf("%d",cnt);
    return 0;
}

 

posted @ 2018-09-11 20:40  ztz11  阅读(246)  评论(0编辑  收藏  举报