POJ 4044 Score Sequence

题目链接

题意 :给你两个序列,进行降序排序,找出连续的公共子序列,将这个子序列输出,然后对个位数升序排序,如果个位数相同就按数的大小排,再输出这个新排好的。

思路 :先排序,再找公共子序列,最后个位排序输出。

 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
") ;
76                 continue ;
77             }
78             for(int i = pos ; i < pos+len ; i++)
79             {
80                 printf("%d ",b1[i]) ;
81             }
82             printf("
") ;
83             sort(b1+pos,b1+pos+len,cmp) ;
84             for(int i = pos ; i < pos+len ; i++)
85                 printf("%d ",b1[i]) ;
86             printf("
") ;
87         }
88     }
89     return 0;
90 }
View Code
原文地址:https://www.cnblogs.com/luyingfeng/p/3828521.html