莫名奇妙RE求助,知道在哪一行不知道啥问题
查看原帖
莫名奇妙RE求助,知道在哪一行不知道啥问题
950927
_luo_gu楼主2024/6/23 21:28

上下加test发现问题在标注的那一行

本蒟蒻观测不出来问题

求助!!!!!!

以下代码

#include <bits/stdc++.h>
using namespace std ;
int ch[3000006][66] ;//该数组表示编号为i的节点的字符编号为j的儿子的编号
int tot ;//表示共有几个点
int cnt[3000006] ;//表示在该点终止的字符串的数量
int t , n , q ;
string s_1[100005] , s_2[100005] ;
int chin( char c ){
	if( '0' <= c && c <= '9' ){
		return c - '0' ;
	}
	if( 'a' <= c && c <= 'z' ){
		return c - 'z' + 10 ;
	}
	if( 'A' <= c && c <= 'Z' ){
		return c - 'A' + 36 ;
	}
}

int main(){
	scanf("%d" ,&t );
	while( t -- ){
		scanf("%d%d" , &n , &q );
		scanf("%s" , &s_1 );
		for( int i = 1 ; i <= n ; i ++ ){
			scanf("%s" , &s_1[i] );
		}
		for( int i = 1 ; i <= q ; i ++ ){
			scanf("%s" , &s_2[i] );
		}
		//插入 
		for( int i = 1 ; i <= n ; i ++ ){
			int len ;

			len = s_2[i].length() ; // **************************本行RE!!!!!!!!!!!!!!!!!!!!!!!!! 
			
			int nod = 0 ;
			
			for( int j = 0 ; j < len ; j ++ ){
				if( ch[nod][chin(s_2[i][j])] == 0 ){
                	tot ++ ;
					ch[nod][chin(s_2[i][j])] = tot ; 
				}
				
				nod = ch[nod][chin(s_2[i][j])] ;
				cnt[nod] ++ ;	//放在这里是因为这样每一个点都代表着后面子树的和 
			}	
			
		}
		//查询
		for( int i = 0 ; i < q; i ++ ){
			int len ;
			len = s_1[i].length() ;
			int nod = 0 ;
			for( int j = 0 ; j < len ; j ++ ){
				if( ch[nod][chin(s_1[i][j])] == 0 ){
					cout << 0 << endl;
					continue ;
				}
				nod = ch[nod][chin(s_1[i][j])] ;
			}
			cout << ch[nod][chin(s_1[i][len-1])] << endl;
		} 
	}
	return 0 ; 
}

感谢大佬!!!!!!!!!!!

好人一生平安!!!!!!!

2024/6/23 21:28
加载中...