1874 字符串排序 (逆序对)
来源:互联网 发布:应知故乡事的前一句 编辑:程序博客网 时间:2024/06/18 02:06
1874 字符串排序
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注
定义一个字符串的无序度为所有位置后面的字母比该位置的字母小的总数之和。比如”DAABEC”这个字符串的无序度是5,因为D后面有4个位置比它小(AABC),E后面有1个比它小(C),其它位置后面没有比自己小的。” AACEDGG “的无序度为1(E后面有一个D比它小)。” ZWQM “的无序度为6,每个位置后面所有的字母都比它小。
现在你的任务是给定一些字符串(只由大写字母组成),把他们按照无序度从小到大排序,如果无序度一样,那么就按照输入的相对顺序排序。
Input
单组测试数据。
第一行有两个整数n(0 < n <= 50)和m (0 < m <= 100),分别表示输入的字符串的长度和字符串的个数。
接下来m行,每一行包含一个长度为n的字符串,只由大写字母组成。
Output
输出m行,表示排序之后的字符串。
Input示例
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
Output示例
CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA
#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;struct node{char str[55];int num,index;};struct node S[105];int tree[30];int lowset(int x){ return x&(-x);}void add(int x,int k){ while(x<30) { tree[x]+=k; x+=lowset(x); }}int getsum(int x){ int sum=0; while(x>0) { sum+=tree[x]; x-=lowset(x); } return sum;}bool cmp(struct node a,struct node b){ if (a.num!=b.num) return a.num<b.num; return a.index<b.index;}int main(){ int n,m; char temp[55]; cin>>n>>m; for (int i=0;i<m;i++) { scanf("%s",temp); for (int j=0;j<=30;j++) tree[j]=0; int sum=0; for (int j=0;j<n;j++) { int tt=temp[j]-'A'+1; add(tt,1); sum+=j+1-getsum(tt); } S[i].index=i; S[i].num=sum; strcpy(S[i].str,temp); } sort(S,S+m,cmp); for(int i=0;i<m;i++) { cout<<S[i].str<<endl; } return 0;}
阅读全文
0 0
- 1874 字符串排序 (逆序对)
- 51Nod 1874 字符串排序 逆序对
- POJ1007 字符串按逆序对排序
- 逆序对 (归并排序)
- 【算法】归并排序(可求逆序数或逆序对)
- 笔记1--逆序对(归并排序)
- POJ 2299 逆序对(归并排序)
- 数组中的逆序对(归并排序)
- 求逆序数对(归并排序)
- 排序算法总结(三)逆序对
- 求逆序对(归并排序)
- 归并排序(逆序对的解决)
- 逆序对 归并排序
- 归并排序 & 逆序对
- 归并排序--逆序对
- 对一个字符串逆序
- 归并排序求逆序对
- 【归并排序】【逆序对】序列
- java找出一个数组中出现次数最多的那个元素
- 文章标题
- 数论——(扩展)欧几里得算法辨析
- JS & ES6 -- 语法糖:类
- 千万级并发分布式KV存储系统设计实现和运营
- 1874 字符串排序 (逆序对)
- LinkedList<HashMap<String, Integer>> students = new LinkedList<HashMap<String, Integer>>();
- java设计模式之单例,工厂,代理模式
- 索引概述
- C语言之贪心算法
- LeetCode212. Word Search II
- Kotlin发迹史
- MarchingCube实现(C++ OpenGl代码篇)
- opencv 图像识别程序