牛客小白月赛15 C 表单 ( map 使用)

链接:https://ac.nowcoder.com/acm/contest/917/C
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

子弹上膛的声音,是我唱歌的先兆。
                                                 ——百里守约-朱雀志
 
小T有一张一共有n个字符串的字符串表,因为小T是神所以他可以任意修改这张表,
因为小T是个强迫症,所以他想方设法的使这些字符不同,
所以现在他进行以下操作Q次:
 
(1):给字符串表中加入一个字符串s。
(2):给字符串表去重,输出去掉字符串的数量。
 
由于出题人用win10配的数据,所以读入中会有空行出现,请忽略他们,避免应为这个而WA
注:本系列题不按难度排序哦

输入描述:

第一行两个整数n,Q

后n行每行一个字符串

后Q行每行代表一个操作:

一操作:1 s

二操作:2

输出描述: 对于每个二操作,进行回答。

输入

4 4
play
the
pubg
game
1 game
1 pubg
2
2

输出

2
0

说明:1n,Q5×105  对于所有输入的字符串长度<=40

思路 :就是一个裸的 C++ map 用法,每次判断新加入的字符串有没有出现过,对于当时不知道map的我手动模拟字符串匹配写了几十行(个人感觉手动模拟能过,但是超时了,自己菜了),map类似于python里面的字典,键值对是成对出现的,对于每一个键(key)都有一个值(value)与其对应,且键的值是唯一的,不可重复,引用头文件 #include <map> 定义一个map类 map<string,bool>name

C++ 中 map 提供的是一种键值对容器,里面的数据都是成对出现的,如下图:每一对中的第一个值称之为关键字(key),每个关键字只能在map中出现一次;第二个称之为该关键字的对应值。

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <map>
 4 
 5 using namespace std;
 6 int n, q, num, ans;
 7 string s;
 8 
 9 int main()
10 {
11     map<string,bool>a;
12     cin >> n >> q;
13     for(int i = 0; i < n; i ++ )
14     {
15         cin >> s;
16         if(a[s])  ans ++ ;
17         a[s] = 1;
18     }
19     for(int i = 0; i < q; i ++ )
20     {
21         scanf("%d",&num);
22         if(num == 1)
23         {
24             cin >> s;
25             if(a[s])  ans ++ ;
26             a[s] = 1;
27         }
28         else
29         {
30             cout << ans <<endl;
31             ans = 0;
32         }
33     }
34     return 0;
35 }
 

猜你喜欢

转载自www.cnblogs.com/chuyds/p/11031005.html
今日推荐