ACM1007
题目:DNA序列排序
DNA序列由一序列的大写英文字母表示,如ABCDEF。紊乱程度表示组成DNA序列的字母按照由小到大的顺序进行排列程度,如ABC的紊乱程度比ACB小,因为它字母都是由小到大排序的。紊乱程度计算如下,以DNA序列DCEFB为例:DCEFB的紊乱程度为5,其中字母D右边的序列有2个小于它的字母C和B,字母C有1个小于它的字母B,同理,字母E和F分别有1个排序小于它的字母,紊乱程度=2+1+1+1=5。紊乱程度越大,排序越乱。
程序输入:
第1行输入m和n,其中m表示每一个DNA序列的长度,n表示一共有多少个DNA序列;第2到n行输入DNA序列,每一个DNA序列的长度都为m。m的取值范围为1-100,即DNA序列的长度不超过100,n的范围为1-50,表示最多有50个DNA序列。
结果输出:
按照DNA的紊乱程度由小到大进行排序,如果两个DNA序列的紊乱程度相同,则按照输入的顺序进行排序。
程序设计—(时间16ms,占用空间200k):
#include <iostream>
#include <string> using namespace std; void qsort(int startIndex,int EndIndex,int *vector,string *values){
int start=startIndex;
int end=EndIndex;
int currentValue = *(vector+start);
string currentStr = *(values+start);
while(start<end){
while(start<end&&*(vector+end)>=currentValue){
end--;
}
*(vector+start)=*(vector+end);
*(values+start)=*(values+end);
while(start<end&&*(vector+start)<=currentValue){
start++;
}
*(vector+end)=*(vector+start);
*(values+end)=*(values+start);
}
*(vector+end)=currentValue;
*(values+end)=currentStr;
if(end->startIndex){
qsort(startIndex,end-,vector,values);
}
if(end+<EndIndex)
{
qsort(end+,EndIndex,vector,values);
}
} int main()
{
char line[];
string str;
int *numOfLines=new int[];
int index=;
int *values=new int[];
string *allStr=new string();
int totalLine=;
int leterNum=;
cin>>leterNum>>totalLine;
numOfLines = new int[totalLine];
allStr = new string[totalLine];
values = new int[leterNum];
while (index<totalLine)
{
cin>>line;
str = line;
*(allStr+index)=line;
int count=;
for(int i=;i<leterNum;i++){
int l = line[i]-'A';
*(values+i)=l;
for(int j=i-;j>=;j--){
if(*(values+j)>*(values+i)){
count++;
}
}
}
(*(numOfLines+index))=count;
index++;
}
qsort(,totalLine-,numOfLines,allStr);
for(int i=;i<totalLine;i++){
cout<<*(allStr+i)<<endl;
}
return ;
}
1007是简单题,主要考察一些小细节,有几个需要注意的地方:
(1)数组和指针的问题(由于本人刚刚接触C++,在指针上确实花了一些时间)
数组的指针可以表示第一个元素的位置,然后通过++可以得到其他元素的指针。
如:int *pointer = new int[10];
新建一个10个元素的数组,pointer指向该数组第一个元素的地址,pointer++表示数组第二个元素的地址,pointer+i表示数组第pointer+i个元素。
(2)第二个是输入的问题
弄清楚几个输入的关键方法:
>>、getLine、gets、get_s、fget
ACM1007的更多相关文章
- 杭电ACM1007
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- C# ACM poj1007
求逆序数,快排 public static void acm1007(int a, string[] c) { Dictionary<int, string> dic = new Dict ...
随机推荐
- POJ 2409 Let it Bead [置换群 Polya]
传送门 题意:$m$种颜色$n$颗珠子,定义旋转和翻转两种置换,求不等价着色数 暴力求每个置换的循环节也许会$T?$ 我们可以发现一些规律: 翻转: $n$为奇数时每个置换有$1+\frac{n-1} ...
- 使用angular/react/vue实现相同的面试题组件
面试题要求如下所示 1.angular: <!DOCTYPE html><html lang="en"><head> <meta char ...
- 数组的复制及ES6数组的扩展
一.数组的复制 // alert([1,2,3]==[1,2,3]); let cc = [0,1,2]; let dd = cc; alert(dd==cc);//此时改变dd会影响cc ES5 只 ...
- 万类之父——Object
jdk1.8.0_144 Object类作为Java中的顶级类,位于java.lang包中.所有的类直接或者间接都继承自它.所以Object类中的方法在所有类中都可以直接调用.在深入介绍它的API时, ...
- Netty的常用概念
我们先来看一段代码: // Configure the server. EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGr ...
- 让Python输出更漂亮
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="": student_age = 18 print("学生的年龄为:", stude ...
- 【Unity3D技术文档翻译】第1.8篇 AssetBundles 问题及解决方法
上一章:[Unity3D技术文档翻译]第1.7篇 AssetBundles 补丁更新 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Deve ...
- Mock摆脱后端拖拉(借鉴官网)(一)
mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试.mock有如下功能 根据数据模板生成模板数据 模拟ajax请求,生成请求数据 基于html模板生成模拟数据 下载安装 n ...
- Java经典编程题50道之三
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因为153=1的三次 ...
- EmguCV中图像类型进行转换
1. Bitmap:类型不在 Emgucv命名空间中 2. Image<TColor, TDepth> 3. Mat: 4. UMat: 高 ...