日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2020年第十八届西电程序设计竞赛网络预选赛之Problem C 没人比我更懂 COVID-19

發布時間:2023/12/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020年第十八届西电程序设计竞赛网络预选赛之Problem C 没人比我更懂 COVID-19 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述
現在,一種高度危險的病毒襲擊了學園都市,人們陷入危難之中。
作為藍星上最無所不知的人,你對病毒基因了如指掌。為了拯救即將廢棄的
校賽,行星防御理事會找到了你。
現在你必須找出病毒所有可能的變異情況,以抵御病毒的攻擊。
給定 n 個病毒堿基序列片段,由大寫字母 ATCG 表示,長度均為 m。
你發現對于兩串堿基序列,它們交叉變異的結果僅取決于對應位置上的堿
基,規律如下:
× A T C G
A A T C G
T T A G C
C C G A T
G G C T A
例如,序列 AACGT 與 TACAG 交叉將得到 TAAGC。
你想知道,選取任意個病毒并按任意順序交叉,總共能獲得多少種不同的序
列。
注意: 每串基因序列最多用一次。
輸入
第一行為用空格分隔的兩個正整數 n , m 。滿足 1 ≤ n ≤ 10 ,1 ≤ m ≤ 20。
然后為 n 行長度為 m 的字符序列,由大寫字母 ATCG 構成。
輸出
一個整數,表示能組合出多少種不同的序列。
樣例
樣例輸入 樣例輸出
3 2
AT
TA
GG
7
May 10, 2020 4
2020 年西電程序設計競賽網絡賽
樣例解釋
除了原來的 AT、TA、GG 三種
還可交叉出
AT×TA=TT
AT×GG=GC
TA×GG=CG
AT×TA×GG=CC
提示
你翻出了之前研究的記錄,但殘缺的頁面上只留下這幾個字:
AT-1
TA-4
GG-15
思路:恕我直言,這個題目的提示真的沒有發現是怎么回事,可能是我太菜了。我們可以發現字符串相乘是符合交換律的,也就是同樣的字符串相乘,無論誰前誰后,都是沒關系的。這就轉換成了任意個數的字符串相乘,最終會出現多少個組合。我的天,在我想明白這一點之前,我弄的全排列求得所有的組合。后來想過來之后,藍橋中不是很多這樣的題嗎,我傻了。。dfs就可以了。
代碼如下:

#include<bits/stdc++.h> #define ll long long using namespace std;const int maxx=100; int a[maxx]; char s[100001][maxx*2]; char mp[30][30],s1[24]; set<string> rr,zz; vector<int> ans; int n,m,x;inline void init() {mp[0][0]=mp[2][2]=mp[6][6]=mp[19][19]='A';mp[0][19]=mp[19][0]='T';mp[0][2]=mp[2][0]='C';mp[0][6]=mp[6][0]='G';mp[19][2]=mp[2][19]='G';mp[19][6]=mp[6][19]='C';mp[2][6]=mp[6][2]='T'; } inline void solve(char *s0,char *s2) {char s3[21];for(int i=0;i<m;i++) s3[i]=mp[s0[i]-'A'][s2[i]-'A'];s3[m]='\0';strcpy(s1,s3); } inline void fcs() {if(ans.size()<=1) return ;solve(s[ans[0]],s[ans[1]]);for(int i=2;i<ans.size();i++) solve(s1,s[ans[i]]);string T="";for(int i=0;i<m;i++) T+=s1[i];rr.insert(T); } inline void dfs(int x) {if(x>n) {fcs();return ;}ans.push_back(x);dfs(x+1);ans.pop_back();dfs(x+1); } int main() {string T="";scanf("%d%d",&n,&m);init();for(int i=1;i<=n;i++) a[i]=i;for(int i=1;i<=n;i++) scanf("%s",s[i]);ans.clear();dfs(1); for(int i=1;i<=n;i++){T="";for(int j=0;j<m;j++) T+=s[i][j];rr.insert(T);}printf("%d\n",rr.size());return 0; }

努力加油a啊,(o)/~

總結

以上是生活随笔為你收集整理的2020年第十八届西电程序设计竞赛网络预选赛之Problem C 没人比我更懂 COVID-19的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。