HELP

学术版

```cpp #include<bits/stdc++.h> using namespace std; map<string,int>mp; map<int,string>mmp; bool vis[105]; int n; string a[105],b[105],ans[105]; bool check(){ for(int i=1;i<=8;i++){ if(a[i-1]!=b[i]&&a[i+1]!=b[i]){ return false; } } return true; } void update(){ bool flag=0; if(ans[1]==""){ for(int i=1;i<=8;i++){ ans[i]=a[i]; } return; } for(int i=1;i<=8;i++){ if(mp[a[i]]>mp[ans[i]]){ flag=1; break; } } if(flag==1){ return; } for(int i=1;i<=8;i++){ ans[i]=a[i]; } return; } void dfs(int k){ if(k==9){ if(check()==1){ update(); } return; } for(int i=1;i<=n;i++){ if(vis[i]==0){ a[i]=mmp[i]; vis[i]=1; dfs(k+1); vis[i]=0; } } return; } int main(){ cin>>n; mp["Beatrice"]=1; mp["Belinda"]=2; mp["Bella"]=3; mp["Bessie"]=4; mp["Betsy"]=5; mp["Blue"]=6; mp["Buttercup"]=7; mp["Sue"]=8; mmp[1]="Beatrice"; mmp[2]="Belinda"; mmp[3]="Bella"; mmp[4]="Bessie"; mmp[5]="Betsy"; mmp[6]="Blue"; mmp[7]="Buttercup"; mmp[8]="Sue"; for(int i=1;i<=n;i++){ string s="",ls=""; int aa; getline(cin,s); bool flag=0; for(int i=0;i<s.size();i++){ ls+=s[i]; if(flag==0){ for(int i=1;i<=8;i++){ if(ls==mmp[i]){ aa=i; ls=""; flag=1; } } } else{ for(int i=1;i<=8;i++){ if(ls==mmp[i]){ b[aa]=mmp[i]; } } } } } dfs(1); for(int i=1;i<=8;i++){ cout<<ans[i]<<endl; } return 0; } ```
by Forever1507 @ 2020-10-24 11:17:26


|