莫名奇妙RE求助,知道在哪一行不知道啥问题

P8306 【模板】字典树

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

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

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


|