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