链接:https://ac.nowcoder.com/acm/contest/917/C
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制: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
说明:1≤n,Q≤5×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 }