水题,直接贴代码。
代码:
//poj 4044
//sep9
#include <iostream>
#include <algorithm>
using namespace std;
int a[60],b[60];
int ans2[60];
int n,m;
int deal(int index)
{
int i,j,len=0,t_i,t_j,t_len;
for(j=0;j<m;++j)
if(b[j]==a[index]){
for(t_i=index,t_j=j,t_len=0;t_i<n&&t_j<m;++t_i,++t_j,++t_len)
if(a[t_i]!=b[t_j])
break;
len=max(len,t_len);
}
return len;
}
int cmp(int x,int y)
{
if(x%10!=y%10)
return x%10<y%10;
return x<y;
}
int main()
{
int cases;
scanf("%d",&cases);
while(cases--){
int i;
scanf("%d%d",&n,&m);
for(i=0;i<n;++i)
scanf("%d",&a[i]);
for(i=0;i<m;++i)
scanf("%d",&b[i]);
sort(a,a+n);
int p=0;
for(int i=0;i<n;++i)
if(i==0||a[i]!=a[i-1])
a[p++]=a[i];
n=p;
sort(b,b+m);
p=0;
for(int i=0;i<m;++i)
if(i==0||b[i]!=b[i-1])
b[p++]=b[i];
m=p;
int len=-1,ansi;
for(i=0;i<n;++i){
int tmp=deal(i);
if(tmp>=len){
len=tmp;
ansi=i;
}
}
if(len<=0)
printf("NONE\n");
else{
int p=0;
for(i=ansi+len-1;i>=ansi;--i){
ans2[p++]=a[i];
printf("%d ",a[i]);
}
printf("\n");
sort(ans2,ans2+p,cmp);
for(int i=0;i<p;++i)
printf("%d ",ans2[i]);
printf("\n");
}
}
return 0;
}