HDU 1379 DNA Sorting (水归并排序)
来源:互联网 发布:数据集市建模工具 编辑:程序博客网 时间:2024/06/07 23:18
原题链接:Here!
分析:使用归并排序查找逆序数然后设置一个游标从0开始扫,扫到输出就ok
/*Note:处理逆序数对问题使用归并排序的思想 */ #include<cstdio>#include<cstring>#include<algorithm>using namespace std;//#define testint cnt ;const int inf=0x3f3f3f;char str[100+5][50+5];// n<=50 m<=100void marge_sort(int *A,int x,int y,int *T){// O(nlogn) 数据上限在4.5*10^6左右 if(y-x>1){int m=x+(y-x)/2;int p=x,q=m,i=x;marge_sort(A,x,m,T);marge_sort(A,m,y,T);while( p<m || q<y){if( q>=y || ( p<m && A[p]<=A[q] ))T[i++]=A[p++];elseT[i++]=A[q++],cnt+=m-p;}for(int i=x;i<y;i++)A[i]=T[i];}}int main(){int T,n,m;int A[100],t[100],Mark[100];#ifdef testfreopen("Hdu 1379 DNA Sorting.txt","r",stdin);#endifscanf("%d",&T);while(T--){memset(Mark,0,sizeof(Mark));memset(A,0,sizeof(A));memset(t,0,sizeof(t));scanf("%d%d",&n,&m);for(int i=0;i<m;i++){cnt=0;scanf("%s",&str[i]);for(int j=0;j<n;j++){// 将字符型转化为整型 if(str[i][j]=='A')A[j]=1;else if(str[i][j]=='C')A[j]=2;else if(str[i][j]=='G')A[j]=3;else if(str[i][j]=='T')A[j]=4;}marge_sort(A,0,n,t);// O(nlogn) Mark[i]=cnt;}for(int i=0;i<inf;i++){// 输出注意一下就ok,设定个标尺从下向上扫,虽然是m*inf.. 好在数据小 for(int j=0;j<m;j++){if(Mark[j]==i)printf("%s\n",str[j]);}}}return 0;}
0 0
- HDU 1379 DNA Sorting (水归并排序)
- HDU 1379 DNA sorting
- hdu 1379 DNA Sorting
- HDU 1379:DNA Sorting
- hdu-1379 DNA Sorting
- hdu 1379 DNA Sorting
- POJ 1007 DNA Sorting (归并排序)
- DNA Sorting(DNA排序)
- hdoj 1379 DNA Sorting【排序】
- DNA Sorting 1379 (字符串排序)
- POJ 1007 DNA sorting(统计逆序对数+归并排序)
- hdoj--1379--DNA Sorting(排序水题)
- POJ 1007 && HDU 1379 DNA Sorting(水~)
- POJ1007,DNA Sorting,排序水题
- HDU—— 1379 DNA Sorting
- hdu杭电 1379 DNA Sorting
- poj1007 DNA Sorting 排序
- DNA Sorting(暴力+排序)
- poj 2531 Network Saboteur
- STM32 入门之 GPIO
- BLE透传
- 友元函数与友元类、友元与嵌套
- signal_test
- HDU 1379 DNA Sorting (水归并排序)
- TypeScript Symbols 介绍
- Hibernate框架(一)——总体介绍
- 音频的采样率和位深
- Git常用命令详解(转载)
- 从博客园转站至CSDN说明
- JZOJ 4919. 【NOIP2017提高组模拟12.10】神炎皇
- [LeetCode]Find Minimum in Rotated Sorted Array I&II
- Hibernate(二)——POJO对象的操作