题目链接.
记一道恶心心的题…
暴力dfs即可,我是用string记录的每一种情况。
真是被输出恶心到了
感觉直接把羟基羧基脱水处理好是我觉得比较简单的方法。
再次感慨一下选择好重要…
为什么没有留一场昆明打
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;
string s1[]=
{
" H H O H H O H H O H H O H H O ",
" | | || | | || | | || | | || | | || ",
" N-C-C--- N-C-C--- N-C-C--- N-C-C--- N-C-C--- ",
" | | | | | ",
" H-C-H H-C-H H-C-H H-C-S-H H-C-H ",
" | | | | | ",
" H O=C-N-H O=C-O-H H H-C-H ",
" | | ",
" H O=C-N-H ",
" | ",
" H ",
" ",
" "
};
string s2[]=
{
" H H O H H O H H O H H O H H O ",
" | | || | | || | | || | | || | | || ",
" N-C-C--- N-C-C--- N-C-C--- N-C-C--- N-C-C--- ",
" | | | | | ",
" H-C-H H H-C-H H-C-O-H H-C-O-H ",
" | | | | ",
" H-C-H H-C-H H H-C-H ",
" | | | ",
" O=C-O-H S H ",
" | ",
" H-C-H ",
" | ",
" H "
};
int a[]={89,132,133,121,146,147,75,149,105,119};
int b[]={7,9,7,7,11,9,5,13,7,9};
int m,n;
map<string,int> mp;
vector<int>v;
int ans=0;
vector<string>ve;
void dfs(int pos,int res,int s,string r)
{
if(res>n)return;
if(s>1)
{
ve.push_back(r);
ans++;
}
for(int i=0;i<v.size();i++)
{
if(res+a[v[i]]-18<=n)
{
char c=v[i]+'0';
dfs(i,res+a[v[i]]-18,s+1,r+c);
}
}
}
int main()
{
ios::sync_with_stdio(0);
//cin.tie(0);cout.tie(0);
//cout<<s1[0].size();
for(int i=0;i<13;i++)
{
s1[i]+=s2[i];
//cout<<s1[i]<<"\n";
}
mp["Ala"]=0;
mp["Asn"]=1;
mp["Asp"]=2;
mp["Cys"]=3;
mp["Gln"]=4;
mp["Glu"]=5;
mp["Gly"]=6;
mp["Met"]=7;
mp["Ser"]=8;
mp["Thr"]=9;
cin>>m>>n;
for(int i=0;i<m;i++)
{
string s;cin>>s;
v.push_back(mp[s]);
}
for(int i=0;i<v.size();i++)
{
char c=v[i]+'0';
string s="";
s=s+c;
dfs(i,a[v[i]],1,s);
}
sort(ve.begin(),ve.end());
cout<<ans<<"\n";
for(int i=0;i<ans;i++)
{
int maxn=0;
//cout<<ve[i]<<"\n";
for(int j=0;j<ve[i].size();j++)
{
int id=ve[i][j]-'0';
maxn=max(maxn,b[id]);
}
//cout<<maxn<<"\n";
for(int ii=0;ii<maxn;ii++)
{
if(ii==2)cout<<"H-";
else cout<<" ";
for(int j=0;j<ve[i].size();j++)
{
int id=ve[i][j]-'0';
if(j==ve[i].size()-1&&ii==2)
{
for(int x=(id)*15+2;x<=(id)*15+7;x++)cout<<s1[ii][x];
cout<<"O-H";
}
else
{
for(int x=(id)*15+2;x<=(id)*15+9;x++)cout<<s1[ii][x];
}
}
cout<<"\n";
}
cout<<"\n";
}
return 0;
}