rt,这一份代码在洛谷能 AC,但是在赛时只过了两个点,其他的点都是 RE,有人能帮忙看一下有什么问题吗?(数组是后来改大的,可以证明不是数组开小了或者内存不够)
#include<bits/stdc++.h>
using namespace std;
char s[200005],t[200005],m[90];
bitset<90> check[90];
int cnt[90],q;
int main(void){
scanf("%s%s",s,t);
int tl = strlen(t);
for(int i = 0;i <= 'r'-'a';++ i)
check[i].set();
for(char c = 'a';c <= 'r';++ c){
int j = 0;
memset(cnt,0,sizeof(cnt));
for(int i = 0;s[i] != '\0';++ i){
++ cnt[s[i]-'a'];
if(s[i] == c){
for( ;t[j] != s[i] && j < tl;++ j)
-- cnt[t[j]-'a'];
-- cnt[t[j]-'a'];
++ j;
for(int k = 0;k <= 'r'-'a';++ k){
if(cnt[k]){
check[s[i]-'a'][k] = 0;
check[k][s[i]-'a'] = 0;
}
}
}
}
}
memset(cnt,0,sizeof(cnt));
for(int i = 0;s[i] != '\0';++ i)
++ cnt[s[i]-'a'];
for(int i = 0;t[i] != '\0';++ i)
-- cnt[t[i]-'a'];
for(int i = 0;i <= 'r'-'a';++ i)
if(cnt[i])
check[i][i] = 0;
scanf("%d",&q);
while(q --){
bool flag = 0;
scanf("%s",m);
for(int i = 0;m[i] != '\0' && !flag;++ i){
for(int j = i;m[j] != '\0' && !flag;++ j){
if(!check[m[i]-'a'][m[j]-'a']){
printf("N");
flag = 1;
}
}
}
if(!flag)
printf("Y");
}
return 0;
}