题意 :给你两个序列,进行降序排序,找出连续的公共子序列,将这个子序列输出,然后对个位数升序排序,如果个位数相同就按数的大小排,再输出这个新排好的。
思路 :先排序,再找公共子序列,最后个位排序输出。
1 #include2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 int a1[35],a2[35] ; 9 int b1[35],b2[35] ;10 11 bool cmp(int a,int b)12 {13 if(a%10 == b%10)14 return a < b ;15 return a % 10 < b % 10 ;16 }17 int main()18 {19 int T ;20 while(~scanf("%d",&T))21 {22 while(T--)23 {24 memset(a1,0,sizeof(a1)) ;25 memset(a2,0,sizeof(a2)) ;26 int n1,n2 ;27 scanf("%d %d",&n1,&n2) ;28 for(int i = 0 ; i < n1 ; i++)29 scanf("%d",&a1[i]) ;30 for(int i = 0 ; i < n2 ; i++)31 scanf("%d",&a2[i]) ;32 sort(a1,a1+n1) ;33 sort(a2,a2+n2) ;34 reverse(a1,a1+n1) ;35 reverse(a2,a2+n2) ;36 int len1 = 1 ;37 b1[0] = a1[0] ;38 for(int i = 1 ; i < n1 ; i++)39 {40 if(a1[i] != a1[i-1])41 b1[len1++] = a1[i] ;42 }43 int len2 = 1 ;44 b2[0] = a2[0] ;45 for(int i = 1 ; i < n2 ; i++)46 {47 if(a2[i] != a2[i-1])48 b2[len2++] = a2[i] ;49 }50 int len = -1,pos = 0 ;51 for(int i = 0 ; i < len1 ; i++)52 {53 for(int j = 0 ; j < len2 ; j++)54 {55 if(b1[i] == b2[j])56 {57 int lenx = 1 ;58 for(int k = 1 ; i+k < len1&&j+k < len2 ; k++)59 {60 if(b1[i+k] == b2[j+k])61 lenx ++ ;62 else break ;63 }64 if(len < lenx)65 {66 len = lenx ;67 pos = i ;68 }69 break ;70 }71 }72 }73 if(len == -1)74 {75 printf("NONE\n") ;76 continue ;77 }78 for(int i = pos ; i < pos+len ; i++)79 {80 printf("%d ",b1[i]) ;81 }82 printf("\n") ;83 sort(b1+pos,b1+pos+len,cmp) ;84 for(int i = pos ; i < pos+len ; i++)85 printf("%d ",b1[i]) ;86 printf("\n") ;87 }88 }89 return 0;90 }