poj 1007 归并+STL
2015-11-03 20:43
351 查看
#include<iostream> #include<map> #include<string> #include<algorithm> #include<fstream> #include<cmath> #include<vector> #include<queue> #include<map> #include<math.h> using namespace std; #define lch(i) ((i)<<1) #define rch(i) ((i)<<1|1) #define sqr(i) ((i)*(i)) #define pii pair<int,int> #define mp make_pair #define FOR(i,b,e) for(int i=b;i<=e;i++) #define FORE(i,b,e) for(int i=b;i>=e;i--) #define ms(a) memset(a,0,sizeof(a)) const int maxnum =21252; const int mod = 10007; int n,m; char le[51],ri[51]; int sortAndUnited(char *str,int r){//0~len-1 if(r==0) return 0; int mid = r/2; int sum=0; sum+=sortAndUnited(str,mid); sum+=sortAndUnited(str+mid+1,r-mid-1); FOR(i,0,mid){ le[i]=str[i]; } le[mid+1]='Z'+1; FOR(i,mid+1,r){ ri[i-mid-1]=str[i]; } ri[r-mid]='Z'+1; int ple=0,pri=0; FOR(i,0,r){ if(ri[pri]<le[ple]){ sum+=mid+1-ple; str[i]=ri[pri]; pri++; }else{ str[i]=le[ple]; ple++; } } return sum; } int cmp(pair<string,int> a,pair<string,int> b){ return a.second<b.second; } // //#define _DEBUG_ 1; int main() { #ifdef _DEBUG_ fstream fin("G:/1.txt"); #else #define fin cin #endif fin>>m>>n; char tmp[51],cpy[51]; vector<pair<string,int>> vec; FOR(i,1,n){ fin>>tmp; strcpy(cpy,tmp); vec.push_back(mp(cpy,sortAndUnited(tmp,m-1))); } sort(vec.begin(),vec.end(),cmp); int size=vec.size(); FOR(i,0,size-1){ printf("%s\n",vec[i].first.c_str()); } return 0; }
相关文章推荐
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#中的尾递归与Continuation详解
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- Javascript递归打印Document层次关系实例分析
- oracle 使用递归的性能提示测试对比
- 使用curl递归下载软件脚本分享
- Perl脚本实现递归遍历目录下的文件
- JavaScript的递归之递归与循环示例介绍
- C# 递归查找树状目录实现方法
- 全排列算法的非递归实现与递归实现的方法(C++)
- php递归列出所有文件和目录的代码
- java递归菜单树转换成pojo对象
- 一个JavaScript递归实现反转数组字符串的实例
- Java中的递归详解(用递归实现99乘法表来讲解)
- C语言的递归思想实例分析
- php通过递归方式复制目录和子目录的方法
- php递归法读取目录及文件的方法