悲催的 1007:DNA排序
阿新 • • 發佈:2018-12-09
描述
現在有一些長度相等的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; }
從此以後,我要永遠的相信機器,畢竟機器從來不會犯錯,再也不想當然了。