此题为12年金华邀请赛A题
克隆了下比赛,A题最简单,也是最挑战人数据处理能力的一题,可惜自己数据处理能力太弱
久久不能写出代码…………
总结下就是题做少了,平时应多做题,少灌水,应放下看电影的时间,玩各种软件的时间
先做好一项再说才是正道,看到一句话说得好
“ 人有两条路要走,一条是必须走的,一条是想走的,你必须把必须走的路走漂亮,才可以走想走的路...”
不扯了,贴代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
using namespace std;
int str1[105],str2[105];
bool cmp1(int x,int y)
{
return x>y;
}
int cmp2(int x,int y)
{
if(x%10==y%10)return x<y;
return x%10 < y%10;
}
int main()
{
int n,m,k,t;
int i,j;
scanf("%d",&t);
while(t--)
{
memset(str1,-1,sizeof(str1));
memset(str2,-1,sizeof(str2));
scanf("%d%d",&n,&m);
for(i=0; i<n; i++)
{
scanf("%d",&str1[i]);
for(j=0; j<i; j++)
{
if(str1[i]==str1[j])//去重合
{
i--;
n--;
}
}
}
for(i=0; i<m; i++)
{
scanf("%d",&str2[i]);
for(j=0; j<i; j++)
{
if(str2[i]==str2[j])
{
m--;
i--;
}
}
}
sort(str1,str1+n,cmp1);
sort(str2,str2+m,cmp1);//for(i=0;i<n;i++)printf("%d^^",str1[i]);
int maxn=0,st=0,ed=0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(str1[i]==str2[j])
{
int k=0;
while(i+k<n&&j+k<m&&(str1[i+k]==str2[j+k]))
{
k++;//暴力
}
//printf("%dfuck^^",k);
if(k>maxn)
{
st=i;
ed=i+k;
maxn=k;
}
}
}
}
if(maxn==0)printf("NONE\n");
else
{
for(i=st; i<ed; i++)
{
printf("%d ",str1[i]);
}
printf("\n");
sort(str1+st,str1+ed,cmp2);//排序,还可以这样
for(i=st; i<ed; i++)
{
printf("%d ",str1[i]);
}
printf("\n");
}
}
return 0;
}