ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

密文搜索 (排序预处理+map,string)

2022-06-04 17:01:47  阅读:141  来源: 互联网

标签:tmp map ch string int 密码 密文 ri


资源限制
内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s
  福尔摩斯从X星收到一份资料,全部是小写字母组成。
  他的助手提供了另一份资料:许多长度为8的密码列表。
  福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的。

  请你编写一个程序,从第一份资料中搜索可能隐藏密码的位置。要考虑密码的所有排列可能性。

  数据格式:

  输入第一行:一个字符串s,全部由小写字母组成,长度小于1024*1024
  紧接着一行是一个整数n,表示以下有n行密码,1<=n<=1000
  紧接着是n行字符串,都是小写字母组成,长度都为8

  要求输出:
  一个整数, 表示每行密码的所有排列在s中匹配次数的总和。

  例如:
  用户输入:
  aaaabbbbaabbcccc
  2
  aaaabbbb
  abcabccc

  则程序应该输出:
  4

  这是因为:第一个密码匹配了3次,第二个密码匹配了1次,一共4次。


  资源约定:
  峰值内存消耗 < 512M
  CPU消耗 < 3000ms


  请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

  所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

  注意: main函数需要返回0
  注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
  注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

  提交时,注意选择所期望的编译器类型。
View Problem

思路:

  • 因为一开始他求的是,字串的所有顺序情况在 目标窜内,因此直接排序预处理解决就行了(自己一开始还傻乎乎的去判断每一个字符时候出现过啥的)
  • 利用map来处理情况
#include <bits/stdc++.h>

using namespace std;


#define ri register int
#define M 10005

template <class G> void read(G &x)
{
    x=0;int f=0;char ch=getchar();
    while(ch<'0'||ch>'9'){f|=ch=='-';ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=f?-x:x;
    return ;
}


map<string,int>mp;
int n;
string s;
int main(){
    
    cin>>s;
    cin>>n;
    for(ri i=1;i<=n;i++)
    {
        string tmp;
        cin>>tmp;
        sort(tmp.begin(),tmp.end());
        mp[tmp]++;
    }
    long long ans=0;
    for(ri i=0;i<s.length();i++)
    {
        string tmp=s.substr(i,8);
        sort(tmp.begin(),tmp.end());
        if(mp.count(tmp))
        {
            ans+=mp[tmp];
        }
    }
    printf("%lld",ans);
    return 0;
    
    
}
View Code

注意: 蓝桥杯不能使用 unordered map!!!!

标签:tmp,map,ch,string,int,密码,密文,ri
来源: https://www.cnblogs.com/Lamboofhome/p/16342155.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有