2297: Carryon的字符串

Time Limit: C/C++ 1 s      Java/Python 3 s      Memory Limit: 128 MB      Accepted: 11      Submit: 24

Submit My Status

Problem Description

Carryon最近喜欢上了一些奇奇怪怪的字符,字符都是英文小写字母,但奇怪的是a可能比b小,也可能比b大,好奇怪。与此同时,他拿到了好多的字符串,可是看着很不顺眼,因为他们很乱,所以他想将这些字符串按字典序从小到大排下序,这样就好看多了。由于a可能比b小,也可能比b大,这样按常规方法肯定是不行的,幸运的是他破解了26个字母的大小顺序,这样他就开开心心的将字符串从小到大排序了。

Input

第一行输入2626个字符的大小顺序

第二行输入一个n(1≤n≤105)n(1≤n≤105)。

接下来nn行,每行一个字符串sisi,数据保证每个字符串不重复。(1≤∑i=1nlen(si)≤3×105)(1≤∑i=1nlen(si)≤3×105)

Output

将n个字符串按字典序从小到大输出。

Sample Input

abcdefghijklmnopqrstuvwxyz

5

bcda

licj

lin

aaaa

aaaaa

Sample Output

aaaa

aaaaa

bcda

licj

lin

法一:先将26个字母映射成a~z,然后在输入原串后按映射规则翻译成标准串,再通过标准串排序从而有序输出原串

#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<map>
using namespace std;
map<char,char>mm;
struct node
{
string s0;//原字符串
string s1;//映射后的字符串
}p[111111];
bool cmp(node x,node y){
return x.s1<y.s1;//按标准串从小到大给结构体排序
}
int main()
{
char s[26];
scanf("%s",s);
int len=strlen(s);
for(int i=0;i<len;i++)
mm[s[i]]='a'+i;
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
cin>>p[i].s0;
int lenth=p[i].s0.length();
for(int j=0;j<lenth;j++)
p[i].s1+=mm[p[i].s0[j]];//翻译
//cout<<p[i].s1<<endl;
}
sort(p,p+n,cmp);//通过s1给p排序
for(int i=0;i<n;i++)
cout<<p[i].s0<<endl;
return 0;
}

法二:建立字典树,然后dfs,先按深度再按与a相差大小找并记录对应字符,每次找到尾结点输出字符串

#include<iostream>
#include<string.h>
#include<algorithm>
#include<map>
#define maxn 1111111
using namespace std;
int pos=1;
char s[26],str[maxn];
int t[maxn][26];
bool vis[maxn];
map<char,int>mm;
void insert(char *s)
{
int rt=0,len=strlen(s);
for(int i=0;i<len;i++)
{
int x=mm[s[i]];
if(!t[rt][x])
t[rt][x]=pos++;
rt=t[rt][x];
}
vis[rt]=1;
}
void dfs(int rt,int deep)
{
for(int i=0;i<26;i++)
{
if(t[rt][i])
{
str[deep]=s[i];
if(vis[t[rt][i]])//到达尾结点
{
str[deep+1]='\0';
printf("%s\n",str);
}
dfs(t[rt][i],deep+1);
}
}
return;
}
int main()
{
scanf("%s",s);
for(int i=0;i<26;i++)
mm[s[i]]=i;
int n;
scanf("%d",&n);
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
char ss[3333333];
scanf("%s",ss);
insert(ss);
}
dfs(0,0);
return 0;
}

I: Carryon的字符串排序(字典树/map映射)的更多相关文章

  1. POJ 1002 487-3279(字典树/map映射)

    487-3279 Time Limit: 2000MS        Memory Limit: 65536K Total Submissions: 309257        Accepted: 5 ...

  2. [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序

    一. 题目 487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 274040   Accepted: 48891 ...

  3. NYOJ 163 Phone List (字符串处理 字典树)

    题目链接 描述 Given a list of phone numbers, determine if it is consistent in the sense that no number is ...

  4. poj1002 字典树+map+查询单词出现次数

    487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 309235   Accepted: 55223 Descr ...

  5. 字典树+map

    Problem Description Carryon最近喜欢上了一些奇奇怪怪的字符,字符都是英文小写字母,但奇怪的是a可能比b小,也可能比b大,好奇怪.与此同时,他拿到了好多的字符串,可是看着很不顺 ...

  6. ACM学习历程—HDU 4287 Intelligent IME(字典树 || map)

    Description We all use cell phone today. And we must be familiar with the intelligent English input ...

  7. ZOJ 3674 Search in the Wiki(字典树 + map + vector)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4917 题意:每一个单词都一些tips单词. 先输入n个单词和他们的t ...

  8. 2017ACM暑期多校联合训练 - Team 6 1001 HDU 6096 String (字符串处理 字典树)

    题目链接 Problem Description Bob has a dictionary with N words in it. Now there is a list of words in wh ...

  9. 51nod 1095 Anigram单词【hash/map/排序/字典树】

    1095 Anigram单词 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b ...

随机推荐

  1. 论文笔记系列-Multi-Fidelity Automatic Hyper-Parameter Tuning via Transfer Series Expansion

    论文: Multi-Fidelity Automatic Hyper-Parameter Tuning via Transfer Series Expansion 我们都知道实现AutoML的基本思路 ...

  2. 使用WinIo32绕过密码控件实现自动登录

    通过winIO32绕过密码控件,实现自动登录 环境: vmware上安装windows 32位系统:windows xp / windows 7 selenium版本: 3.11.0 IEDriver ...

  3. Python写一个京东抢券脚本

    最近看到京东图书每天有优惠券发放,满200减100,诱惑还是蛮大的.反正自己抢不到,想着写个脚本试试. 几个关键步骤 获取优惠券的url 直接审查元素 获取cookie 通过本地代理,比如BurpSu ...

  4. java知识点2

    进阶篇 Java底层知识 字节码.class文件格式 CPU缓存,L1,L2,L3和伪共享 尾递归 位运算 用位运算实现加.减.乘.除.取余 设计模式 了解23种设计模式 会使用常用设计模式 单例.策 ...

  5. [转] 隐马尔可夫(HMM)、前/后向算法、Viterbi算法 再次总结

    最近工作需要优化LSTM-CRF经典模型中的维特比解码部分,发现对维特比一直是个模糊概念,没有get到本质,搜了一圈,发现一篇好文,mark 博主不让转载,mark个地址吧: https://blog ...

  6. [转] 如何轻松愉快地理解条件随机场(CRF)?

    原文链接:https://www.jianshu.com/p/55755fc649b1 如何轻松愉快地理解条件随机场(CRF)?   理解条件随机场最好的办法就是用一个现实的例子来说明它.但是目前中文 ...

  7. Python学习-环境搭建(IronPython)

    一.IDE环境 VS2013  下安装 PTVS 2.2.2 VS 2013 VS2015 已经集成了Python的开发环境 二.安装 IronPython 下载地址:http://ironpytho ...

  8. python 大全

    python 大全:https://awesome-python.com/ 生产 GUI 应用的库 :PyQt ,PySide , 不错   (https://kivy.org)kivy - A li ...

  9. Bringing Native Performance to Electron

    Bringing Native Performance to Electron https://realm.io/blog/native-performance-electron-realm/ Rea ...

  10. python中的os.listdir()函数

    os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表.这个列表以字母顺序. 它不包括 '.' 和'..' 即使它在文件夹中. 只支持在 Unix, Windows 下使用. ...