首页 > 其他分享 >洛谷题单指南-字符串-P2580 于是他错误的点名开始了

洛谷题单指南-字符串-P2580 于是他错误的点名开始了

时间:2024-10-10 18:33:23浏览次数:1  
标签:点名 P2580 int 洛谷题 cin son ++ str 字符串

原题链接:https://www.luogu.com.cn/problem/P2580

题意解读:给n个字符串,再依次处理m个字符串,对于每个字符串,如果在前面n个字符串中输出OK,如果不在n个字符串中输出WRONG,如果在n个字符串中且不止一次查询过输出REPEAT。

解题思路:

1、set/map

方法很简单直接,用set存下前n个字符串, map记录后m个字符串每个字符串出现次数,然后一一遍历m个字符串去set里查找,如果找到就再到map里判断查找过的次数。

100分代码:

#include <bits/stdc++.h>
using namespace std;

int n, m;
set<string> a;
map<string, int> b;

int main()
{
    cin >> n;
    string str;
    while(n--) 
    {
        cin >> str;
        a.insert(str);
    }
    cin >> m;
    while(m--)
    {
        cin >> str;
        b[str]++;
        int ac = a.count(str), bc = b[str];
        if(ac > 0 && bc > 1) cout << "REPEAT" << endl;
        else if(ac > 0) cout << "OK" << endl;
        else cout << "WRONG" << endl;
    }
    return 0;
}

2、Trie树

将n个姓名全部存入Trie树,对于后m个姓名,每个姓名都在Trie树中查找,判断是否存在,如果存在同时记录已经查找过的次数。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 10000 * 50 + 5;
int n, m;
int son[N][26], idx, cnt[N], query[N];

void add(string str)
{
    int u = 0;
    for(int i = 0; i < str.size(); i++)
    {
        int v = str[i] - 'a';
        if(son[u][v] == 0) son[u][v] = ++idx;
        u = son[u][v];
    }
    cnt[u]++;
}

bool find(string str)
{
    int u = 0;
    for(int i = 0; i < str.size(); i++)
    {
        int v = str[i] - 'a';
        if(son[u][v] == 0) 
        {
            cout << "WRONG" << endl;
            return false;
        } 
        u = son[u][v];
    }
    if(cnt[u]) 
    {
        cout << (query[u] > 0 ? "REPEAT" : "OK") << endl;
        query[u]++;
    }   
    else cout << "WRONG" << endl;
    return true;
}

int main()
{
    cin >> n;
    string str;
    while(n--) 
    {
        cin >> str;
        add(str);
    }
    cin >> m;
    while(m--)
    {
        cin >> str;
        find(str);
    }
    return 0;
}

 

标签:点名,P2580,int,洛谷题,cin,son,++,str,字符串
From: https://www.cnblogs.com/jcwy/p/18456778

相关文章

  • 洛谷题单指南-字符串-P1481 魔族密码
    原题链接:https://www.luogu.com.cn/problem/P1481题意解读:在n个字符串中找到最长的词链长度,定义字符串a、b、c可以形成词链,即a是b的前缀、b是c的前缀。解题思路:1、Trie树定义Trie树,也称前缀树、字典树,核心思想是将字符串拆解为单个字符,每个字符是树的一条边,节点是字符添加到树......
  • 洛谷题单指南-字符串-P4391 [BOI2009] Radio Transmission 无线传输
    原题链接:https://www.luogu.com.cn/problem/P4391题意解读:s1由若干个s2组成,求s2的最小长度,注意题目中说明s1是子串,但是不影响,可以认为s1是补全的由若干s2组成的字符串。解题思路:设s1由x个s2组成,如图所示设s1的Next数组从0开始,那么其最长相同前后缀长度为x-1个s2,即Next[s1.siz......
  • 洛谷题单指南-字符串-P3375 【模板】KMP
    原题链接:https://www.luogu.com.cn/problem/P3375题意解读:给定两个字符串:原串s,模式串p,求p在s中出现的所有位置,并输出p的长度为1~p.size()的子串的最长相同真前、后缀的长度。解题思路:KMP模版题,分两问,第一问通过KMP核心算法实现,第二问输出模式串的Next数组内容,接下来一一解读。......
  • 洛谷题单指南-分治与倍增-P6648 [CCC2019] Triangle: The Data Structure
    原题链接:https://www.luogu.com.cn/problem/P6648题意解读:在一个n行的数字三角形中,求所有边长为k的正三角形最大值之和。解题思路:1、枚举法枚举每一个边长为k的三角形,在其中求max,然后累加,n最多3000,时间复杂度是n^4,显然超时。2、倍增和ST思想此题非常类似于RMQ问题,也就是求区......
  • 洛谷每日一题(P2580 于是他错误的点名开始了)字典树/哈希表
    原题目链接:P2580于是他错误的点名开始了-洛谷|计算机科学教育新生态(luogu.com.cn)原题目截图:思路分析:解法一:哈希表法显而易见的一种思路,我们不妨模拟一下:当教练每次点名,我作为特派员,便查看一下有没有这个学生,是不是点过了这个学生。我们查看的过程,就依赖于一张表......
  • 洛谷题单指南-分治与倍增-P4155 [SCOI2015] 国旗计划
    原题链接:https://www.luogu.com.cn/problem/P4155题意解读:在m个点的环上,有n个区间,且各个区间之间没有包含关系,计算从每个区间开始,最少要多少个区间能覆盖环上所有m个点。解题思路:本质上是一个区间覆盖问题!1、破环成链由于题目中是一个环,对于环的问题,在区间DP中介绍过,经典处理......
  • 洛谷题单指南-分治与倍增-P3517 [POI2011] WYK-Plot
    原题链接:https://www.luogu.com.cn/problem/P3517题意解读:有n个连续的点p1,p2,...,pn,将这n个点分成不超过m堆,每堆点连续,每一堆都缩成一个点qi,要使得原来的点p1~ps距离qi的最大值最小(最相似),求这个相似度,并计算一共分成几堆,以及每堆缩到的点qi的坐标。解题思路:要使得若干点缩到一......
  • django点名气象数据分析系统---附源码66265
    目录摘 要第1章 绪 论1.1研究背景与意义1.2 项目背景1.3研究方法和技术第2章 系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程2.2.3数据删除流程2.3 系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4......
  • 洛谷题单指南-分治与倍增-P3509 [POI2010] ZAB-Frog
    原题链接:https://www.luogu.com.cn/problem/P3509题意解读:n个点,每个点上有一只青蛙每次跳到距离自己第k近的点,m次之后跳到哪个点。解题思路:1、计算距离每个点第k近的点,存入ne[N]给定一个点i,距离i第k近的点一定在长度为k+1个点的窗口内,窗口包括i并且,第k近的点只能是左端点或者......
  • 洛谷题单指南-分治与倍增-P2345 [USACO04OPEN] MooFest G
    原题链接:https://www.luogu.com.cn/problem/P2345题意解读:有n头牛,每头牛都有听力v、坐标x两个属性,要计算每两头牛的max{vi​,vj​}×∣xi​−xj​∣之和。解题思路:首先想到的肯定是枚举法,需要O(n^2)的复杂度有没有优化的方法?可以采用分治法!由于是计算两头牛之间的max{vi​,......