牛客小白月賽15 C 表單 ( map 使用)

少年沖沖衝發表於2019-06-16

連結: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 }