1. 程式人生 > >UVA-1368-DNA Consensus String 基礎題 貪心 模擬 詳細註釋

UVA-1368-DNA Consensus String 基礎題 貪心 模擬 詳細註釋

題意:

1. 給你一堆同長度的DNA鏈,要你計算他們共識錯誤(題目裡說的什麼漢明距離)最少的並且字典序最小的DNA鏈

2. 沒有要求多組資料輸入

思路:

1. 首先是對起到桶排序作用的陣列a進行清零操作

2. 從左往右計算共識錯誤最少且字典序最小的DNA(用桶排序和選擇法就可以解決字典序的問題)

3. 計算共識錯誤總和

4. 最後一定要加上字串結束標記'\0'

我的AC程式碼如下:

//UVA-1368-DNA Consensus String
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char str[55][1005];
int a[5];
char s[5];

int main()
{
    //freopen("in.txt","r",stdin);
    s[1]='A';
    s[2]='C';
    s[3]='G';
    s[4]='T';
    int t;
    //本題沒有要求多組資料輸入,我用了while(cin >> t)連wa幾次,很氣
    cin >> t;
    while(t--)
    {
        int n,m;
        cin >> m >> n;
        for(int i=0; i<m; i++)
            cin >> str[i];
        int sum=0,mina;
        for(int i=0; i<n; i++)
        {
            memset(a,0,sizeof(a));     //清零記錄陣列
            mina=0;                    //清零操作還是很重要的呀!
            for(int j=0; j<m; j++)
            {
                if(str[j][i]=='A')
                    a[1]++;
                if(str[j][i]=='C')
                    a[2]++;
                if(str[j][i]=='G')
                    a[3]++;
                if(str[j][i]=='T')
                    a[4]++;
            }

            for(int k=1; k<5; k++)     //按字典序賦值
            {
                if(a[k]>mina)
                {
                    mina=a[k];
                    str[m][i]=s[k];
                }
            }
            sum=sum+m-mina;           //計算共識錯誤總數
        }
        str[m][n]='\0';               //記得加上字串結束標記

        cout << str[m] << endl;
        cout << sum << endl;
    }
    return 0;
}

相關推薦

UVA-1368-DNA Consensus String 基礎 貪心 模擬 詳細註釋

題意: 1. 給你一堆同長度的DNA鏈,要你計算他們共識錯誤(題目裡說的什麼漢明距離)最少的並且字典序最小的DNA鏈 2. 沒有要求多組資料輸入 思路: 1. 首先是對起到桶排序作用的陣列a進行清零操

UVA-1368 DNA Consensus String

DNA (Deoxyribonucleic Acid) is the molecule which contains the genetic instructions. It consists of four different nucleotides, name

DNA Consensus String,( UVa, 1368 )

log ble eof 出現 () == tps clas .net 題目鏈接 :https://vjudge.net/problem/UVA-1368 題目首先得知道什麽是Hamming距離(自行查找),然後註意出現多個解是選擇字典序小者(直接將字典序排號比較),**註意

DNA Consensus String UVA - 1368

#include <iostream> #include <string> using namespace std; int m, n; // 行數,列數 string strs[50]; // 儲存每一行 int num = 0; string result; /

3602 DNA Consensus String

題目傳送門 #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <vector> #inclu

DNA Consensus String

題目(中英對照): DNA (Deoxyribonucleic Acid) is the molecule which contains the genetic instructions. It consists of four different nucleotides, namely Adenin

uva live 7637 Balanced String貪心

std sta print names case push live gif map 題目鏈接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page

小白的刷之路1--紫書第三章習題UVA-455,UVA-227,UVA-232,UVA-1368,UVA-202,UVA-10340,UVA-1587,UVA-1588,UVA-11809

寫在前面 第一次寫博文,求大佬輕拍。。。我是真的小白,雖然是大四生,但幾乎算是非科班出身了,前三年讀的是北京一所211的機械,就學了個C。。。大三下準備保研,思前想後感覺對機械興趣真的不大,就想著轉cs,勉強保到一所中下985,趁著大四還算閒,就想著刷刷題希望漲漲水平。。。  

UVA - 11292】Dragon of Loowater (貪心,水模擬,twopointer雙指標)

題幹: 題目大意: n條惡龍,m個勇士,用勇士來殺惡龍。一個勇士只能殺一個惡龍。而且勇士只能殺直徑不超過自己能力值的惡龍。每個勇士需要支付能力值一樣的金幣。問殺掉所有惡龍需要花費的最少金幣。 解題報告:    twopointer排序後從頭到尾掃一遍就行了。

貪心基礎(區間排程問題+POJ_3617+POJ_3069)

貪心法就是遵循某種規則,不斷貪心地選取當前最優策略的演算法設計方法.(貪心法和動態規劃的區別) 1.區間排程問題 Q:一共有n項工作,每項工作的起始時間分別為s[i],e[i],你可以自主選擇是否參加每項工作,現在希望能夠參加最多的工作(每項工作決定了參加就必須全程參與),

UVA-213-Message Decoding 資訊編碼 基礎模擬 直觀的新手思路+詳細註釋

題意: 1. 首先輸入編碼頭,即一串字串 2. 接下來時只有0和1的串,要求就是對串進行操作然後輸出對應的編碼串 3. 每次編碼先用三個字元計算二進位制和判斷接下來的串時多少個字元為一個編碼 4. 每次編碼遇到全為1的時候結束進行下一次串長判斷(即重複3),直到串長判斷為0

UVa 1596 Bug Hunt (string::find && map && 模擬)

mic 而後 賦值 技術分享 endif 所有 模塊 發現 left 題意:給出幾組由數組定義與賦值構成的編程語句, 有可能有兩種BUG, 第一種為數組下標越界, 第二種為使用尚未定義的數組元素, 叫你找出最早出現BUG的一行並輸出, 每組以‘ . ‘號分隔, 當有兩組輸入

Java基礎

更新 -a ext 大神 準備 bsp detail 其他 java Java面試題 最近一直在準備各種考試,好長時間沒更新筆記了,這兩天在復習數據結構的一些知識,但也沒忘了關註Java的相關知識。從網上找了其他大神的相關面試題,大家可以看一下,希望對大家有

POJ 2251 三維BFS(基礎

art cube find bsp ssi cal input nal sample Dungeon Master Description You are trapped in a 3D dungeon and need to find the quickest way o

ZOJ - 3890 Wumpus(BFS基礎

bject when urn include math ase 找到 algo step Wumpus Time Limit: 2 Seconds Memory Limit: 65536 KB One day Leon finds a

002 生信基礎

it is cti ble 數列 ini mes tcc pen true 01 ‘GATCCAGATCCCCATAC‘, 計算這串數列中兩個出現最高的頻率。 t = ‘GATCCAGATCCCCATAC‘ L = [ ] for i in range(le

51nod 1344 走格子(水+貪心

dfa out else pen false ron style lose src 1344 走格子 基準時間限制:1 秒 空間限制:131072 KB 分值: 5 難度:1級算法題 收藏 關註 取消關註 有編號1-n的n個格子,機器人從1號格子順序向後

二分圖的一大潑基礎

sbo colors 關鍵點 tel 最短 lin nes bit oot 【HDU】//1068 Girls and Boys 最大匹配★//1150 Machine Schedule 最小點覆蓋★1151 Air Raid 最小路徑覆蓋★//1179 Ollivande

uva 10305 拓撲排序裸

ont emp put out 拓撲排序 class main ref 隊列 https://vjudge.net/problem/UVA-10305 目前沒學dfs做法,用的隊列做法,每次找到一個入度為零的點出隊後更新其他點,再加入入度為零的點直到查找完畢,這個