1 条题解
-
0
小数据你挺牛逼克拉斯啊! 未知代码: #include<bits/stdc++.h> using namespace std; string s1,s2,s3; int x[1000000],y[1000000],dp[1000000],vis[1000000],t,c[1000000],b[1000000]; queue<int>q; vector<int>a[1000]; vector<int>ans; void dfs(string l,string r){ if(l.size()>3){ char k=r[0]; int o=l.find(k); if(l.find(r[1])<o) x[r[0]]=r[1]; if(l.find(r[o+1])>o) y[r[0]]=r[o+1]; dfs(l.substr(0,o),r.substr(1,o+1)); dfs(l.substr(o+1,l.size()),r.substr(o+1,l.size())); } else if(l.size()==2){ if(r[0]==l[0]) y[r[0]]=l[0]; else x[r[0]]=l[0]; } else if(l.size()==3){ if(r[0]==l[2]&&r[1]==l[1]&&r[2]l[0]){ x[r[0]]=r[1]; x[r[1]]=r[2]; } else if(rl){ y[r[0]]=r[1]; y[r[1]]=r[2]; } else{ x[r[0]]=r[1]; y[r[0]]=r[2]; } } } int main(){ cin>>s1>>s2; for(int i=0;i<s1.size();i++) vis[s1[i]]=1; for(int i=0;i<s2.size();i++) vis[s2[i]]=1; dfs(s2,s1); for(int i=1;i<=10000;i++) if(vis[i]) c[++t]=i; for(int i=1;i<=t;i++){ if(x[c[i]]!=0) a[x[c[i]]].push_back(c[i]); if(y[c[i]]!=0) a[y[c[i]]].push_back(c[i]); if(x[c[i]]!=0||y[c[i]]!=0) b[c[i]]++; } for(int i=1;i<=t;i++) if(b[c[i]]==0){ q.push(c[i]); dp[c[i]]=1; } while(!q.empty()){ int k=q.front(); q.pop(); ans.push_back(k); for(int i=0;i<a[k].size();i++){ if(b[a[k][i]]==0)continue; b[a[k][i]]--; if(b[a[k][i]]==0) q.push(a[k][i]); } } for(int i=0;i<ans.size();i++) dp[ans[i]]+=dp[x[ans[i]]]+dp[y[ans[i]]]; for(int i=1;i<=t;i++){ for(int j=1;j<=dp[c[i]];j++) cout<<char(c[i]); cout<<endl; } return 0; }
- 1
信息
- ID
- 856
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 28
- 已通过
- 6
- 上传者