码迷,mamicode.com
首页 > 编程语言 > 详细

stl-----map去重,排序,计数

时间:2018-03-08 20:18:19      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:while   iostream   +=   image   tail   title   car   pos   stdin   

一、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去重,排序,计数

标签:while   iostream   +=   image   tail   title   car   pos   stdin   

原文地址:https://www.cnblogs.com/Cloud-king/p/8530449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!