四川大学第二届SCUACM新生赛(同步赛)F

[模板]后缀自动机

题目描述:

这是一道模板题:给定两个字符串S和T,询问S中是否存在一个后缀P,使得T的任何一个前缀的字典序都大于P。
注意:数据里同时含有大写与小写字母,比较字典序时严格按照 Ascii 编码进行比较,即我们认为 A

输入描述:

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

输出描述:

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

思路:

这道题首先不要被迷惑了,直接做模板题,可以直接拿T中的第一个元素和S中的元素比较,只要S中存在小于T[0],即可;

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include 
#include
#define PI 3.1415926535
#define MAX 10005
#define INF 0x3f3f3f3f
#define lowbit(x) (x&(-x))
#define fori(a,b) for(int i=a;i<=b;i++)
#define mem(a,b) memset(a,b,sizeof(a))
#define BASE 10000
#define BASE 10000
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
using namespace std;
typedef struct fract fract;
char a[maxn],b[maxn];
int main()
{
    int t,i,battle=0;
    cin>>t;
    while(t--)
    {
        battle=0;
        cin>>a;
        cin>>b;
        int len=strlen(a);
        for(i=len-1;i>=0;i--)
        {
            if(b[0]>a[i])
            {
                battle=1;
                break;
            }
        }
        if(battle==1)
            printf("YE5\n",i);
        else
            printf("N0\n");
    }
    return 0;
}

记录:

这道题首先想的是拿T中的第一个比较S中的最后一个,然鹅WA了三次,后来盖脸,如果存在S中的最后一个不满足条件,但是前面仍然满足条件,但是我没进行判断,直接前后两两个比较,直接PASS;
后来才恍然大悟,马后炮。。。

你可能感兴趣的:(牛客)