100分卡hack
查看原帖
100分卡hack
1549605
potato_123楼主2024/12/11 00:12
#include <iostream>
#include <cstring>
using namespace std;
const int N=1000000;
int son[N][26],cnt[N],idx=0;
int m,n;
char str[N];
void insert(char* s)//将名单存入trie树
{
    int p=0,l=strlen(s);
    for(int i=0;i<l;i++)
    {
        int u=s[i]-'a';
        if(!son[p][u])son[p][u]=++idx;
        p=son[p][u];
    }
}
string query(char* s)//在树中查寻
{
    int p=0,l=strlen(s),u;
    for(int i=0;i<l;i++)
    {
        u=s[i]-'a';
        if(!son[p][u])return "WRONG";
                    //结束前任意一步发现没找到
        p=son[p][u];
    }
    @@@@@@@@@@@@@@@
    cnt[p]++;
    if(cnt[p]==1)return "OK";
    else return "REPEAT";
    
    
}
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>str;
        insert(str);
    }
    cin>>m;
    while(m--)
    {
        cin>>str;
        cout<<query(str)<<endl;
    }
    return 0;
}

当输入名字是名单中名字的子串时(例如名单有ab,输入一个名字a),理应输出WRONG,但我的代码会跳出带有输出WRONG的循环并输出OK。“@@@@@”处是我认为应该加对于正确答案子串但答案错误情况的特判,但不知道究竟如何判断

2024/12/11 00:12
加载中...