题意 :给你两个序列,进行降序排序,找出连续的公共子序列,将这个子序列输出,然后对个位数升序排序,如果个位数相同就按数的大小排,再输出这个新排好的。
思路 :先排序,再找公共子序列,最后个位排序输出。
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 #include <algorithm> 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 }