USACO题目求助
查看原帖
USACO题目求助
546558
Land_ER楼主2022/4/3 16:45

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;
}

2022/4/3 16:45
加载中...