此题的坑点例如 12312421352345 0
901 900
只要把b去尾巴的零,然后就是kmp判断是不是子串即可
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
const int mx = 1e6+5;
char a[mx],b[mx];
int f[mx];
int n,m;
void getnext(){
int i = 1,j = 0;
f[1] = 0;
while(i <= m){
while(j && b[j] != b[i]) j = f[j];
j++;
i++;
f[i] = j;
}
}
int find(){
getnext();
for(int i = 1,j = 1; i <= n; i++){
while(j && b[j] != a[i]) j = f[j];
if(j==m)
return 1;
j++;
}
return 0;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s%s",a+1,b+1);
n = strlen(a+1);
m = strlen(b+1);
while(m>=1&&b[m]=='0')
m--;
int flag = 0;
if(find())
flag = 1;
for(int i = 1; i <= n/2; i++)
swap(a[i],a[n-i+1]);
if(find())
flag = 1;
flag?puts("Alice"):puts("Bob");
}
return 0;
}