<JZOJ5912>VanUSee

挺魔的

反正我考场上想不到233333333333333

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rint register int
using std::sort;
using std::cin;
template <class T>inline void read(T &X)
{
    X=0;int W=0;char ch=0;
    while(!isdigit(ch))W|=ch=='-',ch=getchar();
    while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    X=W?-X:X;return;
}
int n,m,t,tot1,tot2;
int ou[100010],next[100010],ji[100010],tmp;
char S[100010],T[100010];
bool ok1,ok2,ok;
int main() 
{
    freopen("vanusee.in","r",stdin);
    freopen("vanusee.out","w",stdout);
    read(t);
    while (t--) 
    {
        ok1=ok2=ok=0;
        cin>>S+1;
        cin>>T+1;
        n=strlen(S+1),m=strlen(T+1);
        tot1=tot2=0;
        for (rint i=2,j=0;i<=m;i++) 
        {
            while (T[i]!=T[j+1]&&j) j=next[j];
            if (T[i]==T[j+1]) j++;
            next[i]=j;
        }
        for (rint i=1,j=0;i<=n;i++) 
        {
            while (S[i]!=T[j+1]&&j) j=next[j];
            if (S[i]==T[j+1]) j++;
            if (j==m) 
            {
                tmp=n-i+m-i;
                if (!((n-m)%2)) ou[++tot1]=tmp;
                else ji[++tot2]=tmp;
                j=next[j];
            }
        }
        if ((n-m)%2) 
        {
            sort(ji+1,ji+tot2+1); 
            for(rint i=2;i<=tot2;i++)
                if(ji[i]-ji[i-1]==2) ou[++tot1]=ji[i]-1;  
        }
        for (rint i=1;i<=tot1;i++) 
        {
            if (!ou[i]){ok=1;break;}
            if (ou[i]==2) ok1=1;
            if (ou[i]==-2) ok2=1;
        }
        if (ok) {printf("pty\n");continue;}
        if (!ok1 || !ok2) printf("cqf\n");
        else printf("pty\n");
    }
}

 

转载于:https://www.cnblogs.com/pile8852/p/9818711.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值