悲催的 1007:DNA排序

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:58   2396   0

描述

现在有一些长度相等的DNA串(只由ACGT四个字母组成),请将它们按照逆序对的数量多少排序。

逆序对指的是字符串A中的两个字符A[i]、A[j],具有i < j 且 A[i] > A[j] 的性质。如字符串”ATCG“中,T和C是一个逆序对,T和G是另一个逆序对,这个字符串的逆序对数为2。

输入

第1行:两个整数n和m,n(0<n<=50)表示字符串长度,m(0<m<=100)表示字符串数量

第2至m+1行:每行是一个长度为n的字符串

输出

按逆序对数从少到多输出字符串,逆序对数一样多的字符串按照输入的顺序输出。

样例输入

10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT

样例输出

CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

噫吁嚱,危乎高哉。这不是一道难题,可我就却卡住了半个多小时,中间看这WA一度怀疑人生,这个题简直一眼就可以看透,那么错在哪里了?我看了其他的解法,洋洋洒洒几百行,可能是为了展现不同的方法都可以去解这道题吧。可我依然不得其解。最终我找来了OJ系统的测试数据,终于知道哪里错了。先贴上代码。

#include <iostream>
#include<string>
using namespace std;
int judge(string a)
{
    int p=0;
    for(int i=0;i<a.length();i++)
    {
        for(int j=i+1;j<a.length();j++)
        {
            if(a[i]>a[j])
                p++;
        }
    }
    return p;
}
int main()
{
    int n,m;
    cin>>n>>m;
    int num[110]={0};
    string store[110];
    for(int i=0;i<m;i++)
    {
       cin>>store[i];
       num[i]=judge(store[i]);
    }
    for(int i=0;i<1000;i++)//重点在这里,我之前写的是110,心里想的是,最多50个字符,我传一百多简直超了,直到我看了测试数据,这个i都能到好几百了。于是调大点,就过了。
    {
        for(int j=0;j<m;j++)
        {
            if(num[j]==i)
            {
                cout<<store[j]<<endl;
            }
        }
    }
    return 0;
}

从此以后,我要永远的相信机器,毕竟机器从来不会犯错,再也不想当然了。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP