• [洛谷P2580]于是他错误的点名开始了


    题目大意:给你n个名字,然后m次点名。对于每次点名,如果该名字没有,则输出WRONG,如果该名字第一次被点,输出OK,如果该名字已经被点,则输出REPEAT。

    解题思路:用字典树(Trie)保存,查询即可。对于多次被点名的人,我们在每个节点上加一个变量cnt,记录被点名的次数,如果$cntgeq 1$,说明该人已经被点名,输出WRONG即可。

    C++ Code:

    #include<cstdio>
    using namespace std;
    struct node{
    	bool exist;
    	int cnt;
    	node* nxt[26];
    	node():exist(false),cnt(0){
    		for(int i=0;i<26;++i)nxt[i]=NULL;
    	}
    }*d;
    int n;
    char s[55];
    void ins(char* s){
    	node *p=d;
    	for(int i=0;s[i];++i){
    		int v=s[i]-'a';
    		if(p->nxt[v]==NULL)p->nxt[v]=new node;
    		p=p->nxt[v];
    	}
    	p->exist=true;
    }
    int query(char* s){
    	node *p=d;
    	for(int i=0;s[i];++i){
    		int v=s[i]-'a';
    		p=p->nxt[v];
    		if(p==NULL)return 3;
    	}
    	if(p->exist){
    		if(p->cnt++)return 2;
    		return 1;
    	}
    	return 3;
    }
    int main(){
    	d=new node;
    	scanf("%d",&n);
    	while(n--){
    		scanf("%s",s);
    		ins(s);
    	}
    	scanf("%d",&n);
    	while(n--){
    		scanf("%s",s);
    		int ans=query(s);
    		switch(ans){
    			case 1:puts("OK");break;
    			case 2:puts("REPEAT");break;
    			case 3:puts("WRONG");
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    49 我素故我在
    91 棋盘游戏
    55 删除数组重复元素
    54 删除数组元素
    C++虚函数, 纯虚函数
    iOS-OC-多态
    C++函数引用形参和非引用形参
    怎么清理Mac 硬盘里的其他
    Vue.js中this.$nextTick()的使用
    data中有嵌套,取值要链式取
  • 原文地址:https://www.cnblogs.com/Mrsrz/p/7372943.html
Copyright © 2020-2023  润新知