#include <iostream>#include <fstream>#include <istream>using namespace std;struct Solution{ int start; int end; int num; Solution &operator =(const Solution &);};Solution&Solution::operator =(const Solution &souSol){ start=souSol.start; end=souSol.end; num=souSol.num; return (*this);} Solution FindSolution(const int *a,const int num1,const int *b,const int num2);void main(){ ifstream infile("data.txt"); int a[100]; int b[100]; int num1; int num2; int i=0; Solution sol; bool flag=0; while (true) { if (infile.eof()) { num2=i; break; } int tmp; infile>>tmp; if (tmp<0&&flag==0) { flag=1; num1=i; i=0; continue; } if (tmp<0&&flag==1) { cout<<"shit"<<endl; exit(1); } if (!flag) a[i]=tmp; else b[i]=tmp; i++; } sol=FindSolution(a,num1,b,num2); cout<<sol.start<<' '<<sol.end<<' '<<sol.num<<endl; cout<<a[sol.start]<<' '<<a[sol.end];} Solution FindSolution(const int *a,const int num1,const int *b,const int num2){ Solution tmp,sol; memset(&sol,0,sizeof(Solution)); int i=0; int j=0; tmp.end=-1; tmp.start=0; tmp.num=0; while (true) { if (i>=num1||j>=num2) { if (tmp.num>sol.num) sol=tmp; break; } if (a[i]==b[j]) { tmp.end++; tmp.num++; i++; j++; continue; } if (a[i]>b[j]) { if (tmp.num>sol.num) sol=tmp; tmp.end=i-1; tmp.num=0; tmp.start=i; while(j<num2) { if (a[i]<=b[j]) break; j++; } } if (a[i]<b[j]) { if (tmp.num>sol.num) sol=tmp; tmp.end=i-1; tmp.num=0; tmp.start=i; while(i<num1) { if (a[i]>=b[j]) break; i++; tmp.end++; tmp.start++; } } } return sol;}

评论