_luo_gu @ 2024-06-23 21:28:02
上下加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 ;
}
感谢大佬!!!!!!!!!!!
好人一生平安!!!!!!!