这题很简单,本来不打算写题解,不过想想D题都写了,A题也顺带写一下。
唯一需要注意的地方是要在求解之前先删除序列中相同的元素,而不是之后。
units digit是个位的意思。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 105
int a[N],b[N];
struct node
{
int x,y;
}s[N];
int cmp(const void *a,const void *b)
{
return *(int *)b-*(int *)a;
}
int cmp1(const void *a,const void *b)
{
node *c,*d;
c=(node *)a;
d=(node *)b;
if(c->y!=d->y)
return c->y-d->y;
else
return c->x-d->x;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n1,n2;
scanf("%d%d",&n1,&n2);
int i,j;
for(i=1;i<=n1;i++)
scanf("%d",&a[i]);
for(i=1;i<=n2;i++)
scanf("%d",&b[i]);
qsort(a+1,n1,sizeof(a[0]),cmp);
qsort(b+1,n2,sizeof(b[0]),cmp);
int max,start,end;
max=0;
j=2;
a[1]=a[1];
for(i=2;i<=n1;i++)
{
if(a[i]!=a[i-1])
a[j++]=a[i];
}
n1=j-1;
j=2;
b[1]=b[1];
for(i=2;i<=n2;i++)
{
if(b[i]!=b[i-1])
b[j++]=b[i];
}
n2=j-1;
for(i=1;i<=n1;i++)
{
for(j=1;j<=n2;j++)
{
if(a[i]==b[j])
{
int x,y,temp;
x=i;y=j;
while(x<=n1&&y<=n2)
{
if(a[x]==b[y])
{
x++;
y++;
}
else
break;
}
temp=x-i;
if(temp>max)
{
start=i;
end=x-1;
max=temp;
}
}
}
}
if(max==0)
{
printf("NONE\n");
continue;
}
int c[N];
j=1;
c[0]=a[start];
for(i=start+1;i<=end;i++)
{
if(a[i]!=a[i-1])
c[j++]=a[i];
}
for(i=0;i<j-1;i++)
printf("%d ",c[i]);
printf("%d\n",c[i]);
for(i=0;i<j;i++)
{
s[i].x=c[i];
s[i].y=c[i]%10;
}
qsort(s,j,sizeof(s[0]),cmp1);
for(i=0;i<j-1;i++)
printf("%d ",s[i].x);
printf("%d\n",s[i].x);
}
return 0;
}