P2580 于是他错误的点名开始了

P2580 于是他错误的点名开始了
时间限制(普通/Java):1000MS/3000MS 内存限制:128.00MB

描述

XS中学化学竞赛组教练是一个酷爱炉石的人。
他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON900)。
这之后校长任命你为特派探员,每天记录他的点名。校长会提供化学竞赛学生的人数和名单,而你需要告诉校长他有没有点错名。(为什么不直接不让他玩炉石。)

输入

第一行一个整数 n,表示班上人数。
接下来 n 行,每行一个字符串表示其名字(互不相同,且只含小写字母,长度不超过 50)。
第 n+2 行一个整数 m,表示教练报的名字个数。
接下来 m 行,每行一个字符串表示教练报的名字(只含小写字母,且长度不超过50)。

输出

对于每个教练报的名字,输出一行。
如果该名字正确且是第一次出现,输出 OK,如果该名字错误,输出 WRONG,如果该名字正确但不是第一次出现,输出 REPEAT。

样例输入

5
a
b
c
ad
acd
3
a
a
e

样例输出

OK
REPEAT
WRONG

思路

字典树模板题

AC代码

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
#include <bits/stdc++.h> using namespace std; int tree[1000010][30],cnt=0; int cun[1000010]; void ins(string s,int pos) { int len=s.length(); for(int i=0;i<len;i++) { if(!tree[pos][s[i]-'a'])tree[pos][s[i]-'a']=++cnt; pos=tree[pos][s[i]-'a']; if(i==len-1)cun[pos]=1; } } int fnd(string s,int pos) { int len=s.length(); for(int i=0;i<len;i++) { if(!tree[pos][s[i]-'a'])return 0; pos=tree[pos][s[i]-'a']; if(i==len-1) { int ans=cun[pos]; cun[pos]=2; return ans; } } } signed main() { int n; cin>>n; string s; for(int i=1;i<=n;i++) { cin>>s; ins(s,0); } int m; cin>>m; for(int i=1;i<=m;i++) { cin>>s; int t=fnd(s,0); if(!t)cout<<"WRONG"<<endl; else if(t==1)cout<<"OK"<<endl; else cout<<"REPEAT"<<endl; } }

本文作者:Minza

本文链接:https://www.cnblogs.com/minz-io/p/17265693.html

posted @   Minza  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开