POJ1007
2014-08-22
题目意思:
按照各个字符串的逆序数排序(稳定排序,即若A=B,则AB的顺序还是原来的样子)
思路:
求出每个字符串的逆序数后,排序输出即可
代码:
//Memory Time
// 352K 16MS #include <stdio.h>
#include <stdlib.h> typedef struct Dna{
int num;
char sequence[];
}DNASQ; //计算逆序数
int count(char sq[],int len){
int a,c,g,i;
int count;
a=c=g=;
for(i=len-;i>=;i--){
switch (sq[i]){
case 'A':
{
a++;
break;
}
case 'C':
{
c++;
count+=a;
break;
}
case 'G':
{
g++;
count=count+a+c;
break;
}
case 'T':
{
count=count+a+c+g;
break;
}
default:
break;
}
}
return count;
} int partition(DNASQ sq[],int left,int right){
int i=left;
int j=right;
DNASQ temp=sq[i];
while(i!=j){
while(sq[j].num>=temp.num&&i<j)
j--;
while(sq[i].num<=temp.num&&i<j)
i++;
if(i<j)
{
DNASQ t;
t=sq[i];
sq[i]=sq[j];
sq[j]=t;
}
}
sq[left]=sq[i];
sq[i]=temp;
return i;
}
//快排
void qSort(DNASQ sq[],int left,int right){
int dq=;
if(left<right){
dq=partition(sq,left,right);
qSort(sq,left,dq-);
qSort(sq,dq+,right);
}
} int main(){
DNASQ dnasq[];
int n,m,i;
scanf("%d%d",&n,&m);
for(i=;i<m;i++){
scanf("%s",dnasq[i].sequence);
dnasq[i].num=count(dnasq[i].sequence,n);
}
qSort(dnasq,,m-);
for(i=;i<m;i++){
printf("%s\n",dnasq[i].sequence);
}
return ;
}
PS:这题由于字符串中只含有AGCT四个字母,所以在求逆序数的时候可以直接计数就行了。
POJ1007的更多相关文章
- 算法:POJ1007 DNA sorting
这题比较简单,重点应该在如何减少循环次数. package practice; import java.io.BufferedInputStream; import java.util.Map; im ...
- 【poj1007】 DNA Sorting
http://poj.org/problem?id=1007 (题目链接) 题意 给出m个字符串,将其按照逆序对个数递增输出. Solution 树状数组经典应用. 代码 // poj1007 #in ...
- [POJ1007]DNA Sorting
[POJ1007]DNA Sorting 试题描述 One measure of ``unsortedness'' in a sequence is the number of pairs of en ...
- poj1007 qsort快排
这道题比较简单,但通过这个题我学会了使用c++内置的qsort函数用法,收获还是很大的! 首先简要介绍一下qsort函数. 1.它是快速排序,所以就是不稳定的.(不稳定意思就是张三.李四成绩都是90, ...
- C# ACM poj1007
求逆序数,快排 public static void acm1007(int a, string[] c) { Dictionary<int, string> dic = new Dict ...
- 求字符数组逆序数(poj1007)
int InversionNumber(char* s,int len) { int ans=0; //s逆序数 int A,C,G; //各个字母出现次数,T是最大的,无需计算T出现次数 A=C ...
- 北大poj- 1007
DNA排序 逆序数可以用来描述一个序列混乱程度的量.例如,“DAABEC”的逆序数为5,其中D大于他右边的4个数,E大于他右边的1个数,4+1=5:又如,“ZWQM”的逆序数为3+2+1+0=6. 现 ...
- poj1007——DNA Sorting
Description One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are ...
- ACM训练计划建议(写给本校acmer,欢迎围观和指正)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
随机推荐
- 整数v,从高位到低位,取c位数,得到最大数 (其中:v>=10^c)
题目如上,例子v=22312324,c=3,求得最大数为334. 用自己的想法实现了一遍,如果你有更好的方法的话,欢迎不吝赐教. 我的思路是,先将整数v按位存入一个数组,数组低位为整数高位,如num[ ...
- 定制化Azure站点Java运行环境(5)
Java 8下PermGen及参数设置 在上一章节中,我们定制化使用了Java 8环境,使用我们的测试页面打印出了JVM基本参数,但如果我们自己观察,会发现在MXBeans中,没有出现PermGen的 ...
- nginx上传模块nginx_upload_module使用
1.安装模块 1 cd /data/software 2 wget http://www.grid.net.ru/nginx/download/nginx_upload_module-2.0.12.t ...
- Linux操作系统安全(一)
谈到Linux,大伙最先想到的是这是一个由全世界的优秀的黑客共同开发的一个开源操作系统,目前在服务器领域有着非常广的使用,同时,基于Linux操作系统而开发的Android系统也已经占据了移 ...
- C# 线程池异步调用
许多应用程序使用多个线程,但这些线程经常在休眠状态中耗费大量的时间来等待事件发生.其他线程可能进入休眠状态,并且仅定期被唤醒以轮询更改或更新状态信息,然后再次进入休眠状态.为了简化对这些线程的管理,. ...
- ubuntu设置系统时间与网络时间同步和时区
Linux的时间分为System Clock(系统时间)和Real Time Clock (硬件时间,简称RTC). 系统时间:指当前Linux Kernel中的时间. 硬件时间:主板上有电池供电的时 ...
- C# 泛型转换 将object[] 数组转换为泛型列表
public List<TaskSoftInfo> ReadSoftDownTaskList() { string[] Tid = (strin ...
- 查看oracle锁及解决办法
SQL> select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1, v$session t2 whe ...
- 《编写可维护的JavaScript》之编程实践
最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...
- css3动画之animate
CSS3 动画属性 下面的表格列出了 @keyframes 规则和所有动画属性: 语法:div{animation: 动画名称 一个周期播放时间 速度曲线 延迟时间 下个周期是否逆向} @keyfra ...