噗,忽然发现debug时的一行输出语句没删。
by Rye_Catcher @ 2017-12-30 11:22:04
@[Rye\_Catcher](/space/show?uid=61382) 呸两行
by Rye_Catcher @ 2017-12-30 11:23:28
现在AC了
by Rye_Catcher @ 2017-12-30 11:23:37
然后我没有调试输出还是Too many or too few lines,下载测试点自测是对的
```cpp
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<iterator>
using namespace std;
struct node
{
char value; //元素的值
bool word; //是否为单词节点
bool ifind; //节点是否被作为单词而访问
vector<node*>son;
node(){
value = 0;
word = false;
ifind = false;
}
~node(){
vector<node*>::iterator it;
for(it = son.begin();it!=son.end();it++){
delete *it;
}
}
};
class trie
{
public:
node root;
public:
int insert(string &str);
int find(string &str);
};
int trie::insert(string &str)
{
string::iterator it;
node *p = &root;
for(it=str.begin();it!=str.end();it++){
bool k =false; //子节点中是否含有与待检测字符匹配的
vector<node*>::iterator vit;
for(vit = p->son.begin();vit != p->son.end();vit++){
if(*it == (*vit)->value){
k = true;
p = (*vit);
break;
}
}
if(k == false){
p->son.push_back(new node);
p = *(p->son.end()-1);
p->value = *it;
}
}
p->word = true;
return 0;
}
int trie::find(string &str)
{
string::iterator it;
node *p =&root;
for(it=str.begin();it!=str.end();it++){
bool k = false; // 是否找到匹配的字符
vector<node*>::iterator vit;
for(vit = p->son.begin();vit != p->son.end();vit++){
if(*it == (*vit)->value){
k =true;
p = (*vit);
break;
}
}
if(k == false)return 0;
}
if(p->word == false)return 0;
else if(p->ifind == true)return 1;
else {
p->ifind = true;
return 2;
}
}
int main()
{
int n=0,m=0;
trie t;
string str;
cin>>n;getchar();
for(int i=0;i<n;i++){
getline(cin,str);
t.insert(str);
str.clear();
}
cin>>m;getchar();
int k=0;
for(int i=0;i<m;i++){
if(k==1)cout<<endl;
k = 1;
getline(cin,str);
int ans = t.find(str);
if(ans == 0)cout<<"WRONG";
else if(ans == 1)cout<<"REPEAT";
else if(ans == 2)cout<<"OK";
}
return 0;
}
```
by 宇道人 @ 2018-08-01 11:45:40