24h購物| | PChome| 登入
2013-02-07 13:41:52| 人氣458| 回應0 | 上一篇 | 下一篇

[ZJ][字串處理] d313. FROM GENE TO PROTEIN

推薦 0 收藏 0 轉貼0 訂閱站台

內容 :

     小寢是一位才華洋溢的科學家,然而雖然他的才華出眾,卻有一點深深地困擾著他--那就是他的長相十分醜陋。照鏡子時,鏡子會破裂、出門時,小孩看到會被嚇 哭、照相時,相機甚至無法對焦在他的臉上。小寢知道這是基因的問題,因此決定研究自己的基因。你的任務非常簡單,就是將小寢的基因密碼轉譯成胺基酸。

此表列出了64種密碼子以及胺基酸的標準配對。(取自維基)
 第二位鹼基
UCAG




U

UUU (Phe/F)苯丙氨酸
UUC (Phe/F)苯丙氨酸
UUA (Leu/L)亮氨酸
UUG (Leu/L)亮氨酸

UCU (Ser/S)絲氨酸
UCC (Ser/S)絲氨酸
UCA (Ser/S)絲氨酸
UCG (Ser/S)絲氨酸

UAU (Tyr/Y)酪氨酸
UAC (Tyr/Y)酪氨酸
UAA 終止
UAG 終止

UGU (Cys/C)半胱氨酸
UGC (Cys/C)半胱氨酸
UGA 終止
UGG (Trp/W)色氨酸

C

CUU (Leu/L)亮氨酸
CUC (Leu/L)亮氨酸
CUA (Leu/L)亮氨酸
CUG (Leu/L)亮氨酸

CCU (Pro/P)脯氨酸
CCC (Pro/P)脯氨酸
CCA (Pro/P)脯氨酸
CCG (Pro/P)脯氨酸

CAU (His/H)組氨酸
CAC (His/H)組氨酸
CAA (Gln/Q)谷氨醯胺
CAG (Gln/Q)谷氨醯胺

CGU (Arg/R)精氨酸
CGC (Arg/R)精氨酸
CGA (Arg/R)精氨酸
CGG (Arg/R)精氨酸

A

AUU (Ile/I)異亮氨酸
AUC (Ile/I)異亮氨酸
AUA (Ile/I)異亮氨酸
AUG (Met/M)甲硫氨酸, 起始1

ACU (Thr/T)蘇氨酸
ACC (Thr/T)蘇氨酸
ACA (Thr/T)蘇氨酸
ACG (Thr/T)蘇氨酸

AAU (Asn/N)天冬醯胺
AAC (Asn/N)天冬醯胺
AAA (Lys/K)賴氨酸
AAG (Lys/K)賴氨酸

AGU (Ser/S)絲氨酸
AGC (Ser/S)絲氨酸
AGA (Arg/R)精氨酸
AGG (Arg/R)精氨酸

G

GUU (Val/V)纈氨酸
GUC (Val/V)纈氨酸
GUA (Val/V)纈氨酸
GUG (Val/V)纈氨酸

GCU (Ala/A)丙氨酸
GCC (Ala/A)丙氨酸
GCA (Ala/A)丙氨酸
GCG (Ala/A)丙氨酸

GAU (Asp/D)天冬氨酸
GAC (Asp/D)天冬氨酸
GAA (Glu/E)谷氨酸
GAG (Glu/E)谷氨酸

GGU (Gly/G)甘氨酸
GGC (Gly/G)甘氨酸
GGA (Gly/G)甘氨酸
GGG (Gly/G)甘氨酸

1標準起始編碼,同時為甲硫氨酸編碼。mRNA中第一個AUG就是蛋白質翻譯的起始部位。

 

輸入說明 :

輸入為一段鹼基密碼(長度不超過200個字元)。

以'0'作為結束,不須對本行做任何輸出。

請參考輸入範例。

輸出說明 :

第一行輸出 Case " 密碼 ":

接下來輸出轉譯出的胺基酸,之間請以'-'作為分隔。

蛋白質可能不只一個,之間以換行作分隔

請參考輸出範例。

範例輸入 :help

5'-AUGUAA
5' -AAUGUGA
3' AAUGUAAUAGUGUAA
5'-UCAUGGGGAAACCCUUUUAAAUGCGUGCAUGA
0

範例輸出 :

Case " 5'-AUGUAA ":
Met
Case " 5' -AAUGUGA ":
Met
Case " 3' AAUGUAAUAGUGUAA ":
Met
Met
Case " 5'-UCAUGGGGAAACCCUUUUAAAUGCGUGCAUGA ":
Met-Gly-Lys-Pro-Phe
Met-Arg-Ala

提示 :

背景知識: 分子生物學

鹼基密碼的一端為" 5' ",另一端則為" 3' " 。

轉譯是從5'端讀到3'端,因此," 5' "代表從前面讀到後面," 3' "反之。

開始讀到"AUG",之後每3個鹼基能形成一種胺基酸,讀到"UAA"或"UGA或"UAG"作為結束。

 

以範例輸入第3行為例:

3' AAUGUAAUAGUGUAA

讀到3',因此可以倒轉成

5' AAUGUGAUAAUGUAA

開始讀到"AUG",之後每3個鹼基形成一種胺基酸,讀到"UAA"或"UGA或"UAG"作為結束。

A| AUG(start) UGA(end) |UA| AUG(start) UAA(end)|

     Met                                    Met

 

再以範例輸入第4行為例:

5'-UCAUGGGGAAACCCUUUUAAAUGCGUGCAUGA

剛開始為5',代表從前面讀到後面

開始讀到"AUG",之後每3個鹼基形成一種胺基酸,讀到"UAA"或"UGA或"UAG"作為結束。

UC| AUG(start) GGG AAA CCC UUU UAA(end) || AUG(start) CGU GCA UGA(end) |

      Met             Gly  Lys  Pro  Phe                    Met            Arg   Ala

 

出處 :

我自己 (管理:genius0615)

最不喜歡這種題目了,看得頭暈目眩。


/**********************************************************************************/
/*  Problem: d313 "FROM GENE TO PROTEIN" from 我自己                           */
/*  Language: CPP (2453 Bytes)                                                    */
/*  Result: AC(4ms, 460KB) judge by this@ZeroJudge                                */
/*  Author: morris1028 at 2013-02-07 13:25:05                                     */
/**********************************************************************************/


#include <stdio.h>
#include <map>
#include <string.h>
#include <iostream>
using namespace std;
map<string, string> R;
int main() {
    R["UUU"] = R["UUC"] = "Phe";
    R["UUA"] = R["UUG"] = R["CUU"] = R["CUC"] = "Leu";
    R["CUA"] = R["CUG"] = "Leu";
    R["UCU"] = R["UCC"] = R["UCA"] = R["UCG"] = "Ser";
    R["AGU"] = R["AGC"] = "Ser";
    R["CCU"] = R["CCC"] = R["CCA"] = R["CCG"] = "Pro";
    R["CGU"] = R["CGC"] = R["CGA"] = R["CGG"] = "Arg";
    R["AGA"] = R["AGG"] = "Arg";
    R["ACU"] = R["ACC"] = R["ACA"] = R["ACG"] = "Thr";
    R["GUU"] = R["GUC"] = R["GUA"] = R["GUG"] = "Val";
    R["GCU"] = R["GCC"] = R["GCA"] = R["GCG"] = "Ala";
    R["GGU"] = R["GGC"] = R["GGA"] = R["GGG"] = "Gly";
    R["AUU"] = R["AUC"] = R["AUA"] = "Ile";
    R["UAU"] = R["UAC"] = "Tyr";
    R["CAU"] = R["CAC"] = "His";
    R["CAA"] = R["CAG"] = "Gln";
    R["UGU"] = R["UGC"] = "Cys";
    R["AAU"] = R["AAC"] = "Asn";
    R["AAA"] = R["AAG"] = "Lys";
    R["GAU"] = R["GAC"] = "Asp";
    R["GAA"] = R["GAG"] = "Glu";
    R["AUG"] = "Met";
    R["UAA"] = R["UAG"] = "end";
    R["UGA"] = "end";
    R["UGG"] = "Trp";
    char s[32767], buf[32767];
    while(gets(s) && s[0] != '0') {
        printf("Case \" %s \":\n", s);
        int idx = 0, i, len = strlen(s), flag = 0;
        for(i = 0; s[i]; i++)
            if(s[i] == '3') flag = 1;
        if(flag) {
            for(i = strlen(s)-1; i >= 0; i--)
                if(s[i] >= 'A' && s[i] <= 'Z')
                    buf[idx++] = s[i];
        } else {
            for(i = 0; s[i]; i++)
                if(s[i] >= 'A' && s[i] <= 'Z')
                    buf[idx++] = s[i];
        }
        buf[idx] = '\0';
        for(i = 0; i <= idx; i++)
            s[i] = buf[i];
        for(i = 0; i <= idx; i++) {
            if(s[i] == 'A' && s[i+1] == 'U' && s[i+2] == 'G') {
                char tmp, flag = 0;
                while(true) {
                    tmp = s[i+3];
                    s[i+3] = '\0';
                    if(R[s+i] == "end") {
                        s[i+3] = tmp;
                        i += 2;
                        break;
                    }
                    if(flag)  putchar('-');
                    flag = 1;
                    cout << R[s+i];
                    s[i+3] = tmp;
                    i += 3;
                }
                puts("");
            }
        }
    }
    return 0;
}

台長: Morris
人氣(458) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: ZeroJudge |
此分類下一篇:[ZJ][博弈] d246. Stone Game
此分類上一篇:[ZJ][Greedy+二分搜] b173. 飞船测控站(Stations)

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文