栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3242 Code Merging

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3242 Code Merging

#include <iostream>#include <queue>#include <stack>#include <string>#include <map>#include <vector>#include <cstring>#include <set>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;const int MAX=1005,INF=1<<30;const string END="#CODE-END";int len;map<string,int> mymap;map<string,int>::iterator ite;vector<string> A,B;int cnt;int f[MAX][MAX];int ma[MAX],mb[MAX];vector<int> a,b;int Test;void read(vector<string> &t,vector<int> &arr){ string s; while(getline(cin,s)){ if(s==END) break; ite=mymap.find(s); if(ite==mymap.end()) mymap[s]=len++; t.push_back(s); arr.push_back(mymap[s]); } return ;}void createM(){ int n1=(int)a.size()-1,n2=(int)b.size()-1; memset(f,0,sizeof(f)); for(int i=n1;i>=1;i--){ for(int j=n2;j>=1;j--){ if(a[i]==b[j]) f[i][j]=f[i+1][j+1]+1; else f[i][j]=max(f[i+1][j],f[i][j+1]); } } int L=f[1][1]; cnt=f[1][1]; int x = -1,c=0; for(int i = 1; i<=n1; i++) { for(int j = 1; j<= n2; j++) { if(a[i] == b[j] && f[i][j] == L && j > x) { x = j; L--; ma[c]=i-1; mb[c]=j-1; x = j; c++; break; } } } return ;}struct DD{ bool isM; int b,e;};DD DA[MAX*3],DB[MAX*3];void cut(){ int front=0,rear=0; int len=0; for(int i=0;i<2*cnt;i++,len++){ rear=ma[len]; if(front<rear){ DA[i].isM=0; DA[i].b=front; DA[i].e=rear-1; } else { DA[i].isM=0; DA[i].b=-1; DA[i].e=-1; } ++i; DA[i].isM=1; DA[i].b=ma[len]; DA[i].e=ma[len]; front=ma[len]+1; } rear=(int)A.size(); if(front<rear){ DA[cnt*2].isM=0; DA[cnt*2].b=front; DA[cnt*2].e=rear-1; } else { DA[cnt*2].isM=0; DA[cnt*2].b=-1; DA[cnt*2].e=-1; } front=rear=0; len=0; for(int i=0;i<2*cnt;i++,len++){ rear=mb[len]; if(front<rear){ DB[i].isM=0; DB[i].b=front; DB[i].e=rear-1; } else { DB[i].isM=0; DB[i].b=-1; DB[i].e=-1; } ++i; DB[i].isM=1; DB[i].b=mb[len]; DB[i].e=mb[len]; front=mb[len]+1; } rear=(int)B.size(); if(front<rear){ DB[cnt*2].isM=0; DB[cnt*2].b=front; DB[cnt*2].e=rear-1; } else { DB[cnt*2].isM=0; DB[cnt*2].b=-1; DB[cnt*2].e=-1; } return ;}void output(){ for(int i=0;i<2*cnt+1;i++){ if(DA[i].isM) cout<<A[DA[i].b]<<endl; else if(DA[i].b==-1&&DA[i].e==-1){ if(DB[i].b==-1&&DB[i].e==-1) continue; else{ for(int j=DB[i].b;j<=DB[i].e;j++){ cout<<B[j]<<endl; } } } else if(DB[i].b==-1&&DB[i].e==-1){ if(DA[i].b==-1&&DA[i].e==-1) continue; else{ for(int j=DA[i].b;j<=DA[i].e;j++){ cout<<A[j]<<endl; } } } else { cout<<"//"<<endl <<"//pre in A:"<<endl; for(int j=DA[i].b;j<=DA[i].e;j++){ cout<<A[j]<<endl; } cout<<"//pre in B:"<<endl; for(int j=DB[i].b;j<=DB[i].e;j++){ cout<<B[j]<<endl; } cout<<"//"<<endl; } } return ;}int main(){ int test=1; cin>>Test; cin.ignore(); while(Test--){ cout<<"Case "<<test++<<":"<<endl; len=0; mymap.clear(); A.clear();B.clear(); a.clear();b.clear(); a.push_back(-1);b.push_back(-1); read(A,a); read(B,b); createM(); cut(); output(); cout<<endl; } return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379643.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号