这个题是当时我做错的一道题,字典序想当然了,是搜索到一个小的,字典序就算小了,相等才往后比。想到一个难得算法先不要打怵,可能是一个噱头,比如这个题,就是个水题其实

这是一道模板题:给定两个字符串S和T,询问S中是否存在一个后缀P,使得T的任何一个前缀的字典序都大于P。

注意:数据里同时含有大写与小写字母,比较字典序时严格按照 Ascii 编码进行比较,即我们认为 A<B<C..<Z<a<b<c<...<z 。

输入描述:

每组数据有两行只包含英文字母的字符串,第一行是S,第二行是T (0<∣S∣,∣T∣≤2×105)(0<
  |S|,|T|\leq2\times 10^5)(0<∣S∣,∣T∣≤2×105)

输出描述:

每组数据输出一行,若存在这样的P,输出“YE5”,否则输出“N0”(不带引号)。

示例1

输入

3
lglg
rzynb
zzytql
dalaoddw
uiyouivyziuoxcovzuncuiasdaisdb
yzvuihouvsfvdjsausnnuncvviasudalsky 

输出

YE5
N0
YE5
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
//  freopen("test.in","r",stdin);
//  freopen("test.out","w",stdout);
    char s[200010],t[200010];
    int n,lens,len,lent;
    bool pd,vo=true;
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        pd=true;
        cin>>s;
        cin>>t;
        lens=strlen(s);
        lent=strlen(t);
        len=min(lens,lent);
        for (int i=lens-1;i>=0;i--)
          if (s[i]<t[0])
          {
            pd=false;
            break;
          }
        if (pd==false)
            if (vo==true)
            {
              printf("YE5");
              vo=false;
            }
            else
              printf("\nYE5");
        if (pd==true)
            if (vo==true)
            {
              printf("N0");
              vo=false;
            }
            else
              printf("\nN0");
    }
    return 0;
}
12-25 11:54