2025-12-16 2025-12-16 算法题 题目传送门 大致思路 可以看到所有氨基酸所占的列都是一样的,打表记录所有氨基酸,注意处理空行和头尾特殊氨基酸,具体细节在代码注释里 Code 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131vector<vector<string>> bzd= { { " H H O ", " | | || ", "-N-C-C--", " | ", " H-C-H ", " | ", " H " }, { " H H O ", " | | || ", "-N-C-C--", " | ", " H-C-H ", " | ", " O=C-O-H" }, { " H H O ", " | | || ", "-N-C-C--", " | ", " H-C-H ", " | ", " O=C-N-H", " | ", " H " }, { " H H O ", " | | || ", "-N-C-C--", " | ", " H-C-S-H", " | ", " H " }, { " H H O ", " | | || ", "-N-C-C--", " | ", " H " }, { " H H O ", " | | || ", "-N-C-C--", " | ", " H-C-O-H", " | ", " H-C-H " }, { " H H O ", " | | || ", "-N-C-C--", " | ", " H-C-H ", " | ", " H-C-H ", " | ", " S ", " | ", " H-C-H ", " | ", " H " }, { " H H O ", " | | || ", "-N-C-C--", " | ", " H-C-O-H", " | ", " H-C-H ", " | ", " H " }, { " H H O ", " | | || ", "-N-C-C--", " | ", " H-C-H ", " | ", " H-C-H ", " | ", " O=C-N-H", " | ", " H " }, { " H H O ", " | | || ", "-N-C-C--", " | ", " H-C-H ", " | ", " H-C-H ", " | ", " O=C-O-H" } }; //打表记录所有氨基酸,不要写头尾,后面统一处理void solve() { map<string,int> mp; //映射表 mp["Ala"]=0; mp["Asp"]=1; mp["Asn"]=2; mp["Cys"]=3; mp["Gly"]=4; mp["Ser"]=5; mp["Met"]=6; mp["Thr"]=7;mp["Gln"]=8; mp["Glu"]=9; int n; cin >> n; int mx=0;//记录所有氨基酸中,行数最大占多少,后面用于补充空格 vector<string> a(n); for(int i=0;i<n;i++){ cin >> a[i]; int t=mp[a[i]]; mx=max(mx,(int)bzd[t].size()); } vector<string> ans(mx," "); //空出来一格专门给'H' ans[2]="H"; for(int i=0;i<n;i++){ //注意输出不能一列一列输出,所以我们只能按行拼接,空格也要自己补 auto t =bzd[mp[a[i]]]; int row=t.size(); for(int j=0;j<row;j++) ans[j]+=t[j]; for(int j=row;j<mx;j++) ans[j]+=string(8,' '); } ans[2].pop_back(); ans[2]+="O-H"; //尾氨基酸 for(int i=0;i<mx;i++) cout << ans[i] <<el;} 前一篇 被诈骗的一集 后一篇 竟然可以暴力?
说些什么吧!