stl-----map去重,排序,計數
阿新 • • 發佈:2018-03-08
order 感覺 整數 -i aabb 所有 tex des nbsp
他的助手提供了另一份資料:許多長度為8的密碼列表。
福爾摩斯發現,這些密碼是被打亂後隱藏在先前那份資料中的。 請你編寫一個程序,從第一份資料中搜索可能隱藏密碼的位置。要考慮密碼的所有排列可能性。
一、map
二、去重,排序,計數
例:藍橋杯真題 http://newoj.acmclub.cn/contests/1258/problem/9
1659: 2018藍橋杯培訓-STL應用專題-day 3 map作業題4
題目描述:
福爾摩斯從X星收到一份資料,全部是小寫字母組成。他的助手提供了另一份資料:許多長度為8的密碼列表。
福爾摩斯發現,這些密碼是被打亂後隱藏在先前那份資料中的。 請你編寫一個程序,從第一份資料中搜索可能隱藏密碼的位置。要考慮密碼的所有排列可能性。
輸入:
輸入第一行:一個字符串s,全部由小寫字母組成,長度小於1024*1024
緊接著一行是一個整數n,表示以下有n行密碼,1<=n<=1000
緊接著是n行字符串,都是小寫字母組成,長度都為8
輸出:
一個整數, 表示每行密碼的所有排列在s中匹配次數的總和。
樣例輸入aaaabbbbaabbcccc樣例輸出
2
aaaabbbb
abcabccc
4
講真,第一反應就是KMP,然後就不知道該怎麽做了,感覺例題很典型
#include <iostream> #include <algorithm> #include <map> #include <cstdio> using namespace std; int main() {// freopen("Atext.in","r",stdin); string a,tmp=""; int n,ans=0;; cin >> a; map<string,int> pp; for(int i=0;i<a.size()-7;i++) { tmp=""; for(int j=i;j<i+8;j++) { tmp+=a[j]; } sort(tmp.begin(),tmp.end());//cout << tmp <<endl; pp[tmp]++; } cin >> n; while(n--){ cin >> tmp; sort(tmp.begin(),tmp.end()); ans+=pp[tmp]; } cout << ans << endl; return 0; }
stl-----map去重,排序,計數