1. 程式人生 > >stl-----map去重,排序,計數

stl-----map去重,排序,計數

order 感覺 整數 -i aabb 所有 tex des nbsp

一、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去重,排序,計數