SDUT 3437 排序算法

题目链接: http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=3437

排序算法

Time Limit: 300ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

这是一个简单的排序题!
题面也很简单!
给你一个字符串(保证只包含a~z),把其中的字母按照字母顺序排序!
是不是很简单!
我想你已经迫不及待了吧!
Accept it!

输入

多组输入,(约100组),处理到文件结束
每组只有一行,包含一个字符串S(|S| < = 10000000),保证只含有a到z的字符 

输出

每组输入输出排序好的字符串

示例输入

zba

示例输出

abz

提示

 

来源

QAsQ
恩 我不会告诉你这题是得用哈希加桶排的 QAQ
好吧 既然你知道了,那我也不多说了,当初做的时候我连哈希都不知道,这道水题硬是白白没有A掉
首先解释一下300ms时间限制的由来
view plain copy print 如果您复制代码时出现行号,请点击左边的“view plain”后再复制
  1. #include <cstdio>  
  2. #include <cstring>  
  3. #include <algorithm>  
  4. using namespace std;  
  5. char s[10000005];  
  6. int cmp(const void *a, const void *b)  
  7. {  
  8.     return *(char *)a-*(char *)b;  
  9. }  
  10. int main()  
  11. {  
  12.     while(~scanf("%s", s))  
  13.     {  
  14.         qsort(s,strlen(s),sizeof(s[0]),cmp);  
  15.         printf("%s\n", s);  
  16.     }  
  17.     return 0;  
  18. }  
结果是。。
1481819
3437 Time Limit Exceeded 310ms 0KB g++ 336B 2016-05-06 22:41:53
出题人应该是预料到会有人用qsort对字符串排序了233
下面是真正的代码
view plain copy print 如果您复制代码时出现行号,请点击左边的“view plain”后再复制
  1. #include <bits/stdc++.h>  
  2. char s[10000005];  
  3. int a[26];  
  4. using namespace std;  
  5. int main()  
  6. {  
  7.     while(~scanf("%s", s))  
  8.     {  
  9.         memset(a,0,sizeof(a));  
  10.         int n=strlen(s);  
  11.         for(int i=0;i<n;i++)  
  12.             a[s[i]-'a']++;  
  13.         for(int i=0;i<26;i++)  
  14.             for(int j=1;j<=a[i];j++)  
  15.             printf("%c"'a'+i);  
  16.         printf("\n");  
  17.     }  
  18.     return 0;  
  19. }  

你可能感兴趣的:(SDUT 3437 排序算法)