这道题,对于我这种英文不好的人来说,有点费劲啊。
题目的意思:给你两组成绩,你要找出他们之间最大的公共子序列,不能有重复,然后输出两组数据。
第一组就是:按照从大到小输出最大子序列。
第二组就是:按照个位数由小到大输出,若个位数一样大,则小的在前输出最大子序列。
解题思路基本上已经出来了,就是千万要注意就是在最长子序列匹配之前就就把重复的数字给删除。
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 struct node
6 {
7 int data;
8 int ge;
9 };
10
11 int cmp1(const void *a , const void *b)
12 {
13 return *(int *)a - *(int *)b;
14 }
15 int cmp2(const void *a , const void *b)
16 {
17 return *(int *)b - *(int *)a;
18 }
19 int cmp3( const void *a , const void *b )
20 {
21 struct node *c = (struct node *)a;
22 struct node *d = (struct node *)b;
23 if(c->ge != d->ge) return c->ge - d->ge;
24 else return c->data - d->data;
25 }
26
27 int main()
28 {
29 int t, n, m;
30
31
32 scanf("%d", &t);
33
34 while(t--)
35 {
36
37 int a[35], b[35],c[35];
38 int x[35],y[35];
39 struct node d[35];
40 scanf("%d%d", &n, &m);
41 //printf("xmx\n");
42 for(int i = 0; i < n; i++)
43 scanf("%d", &a[i]);
44 //printf("xmx\n");
45 for(int i = 0; i < m; i++)
46 scanf("%d", &b[i]);
47
48 qsort(a, n, sizeof(a[0]), cmp1);
49 qsort(b, m, sizeof(b[0]), cmp1);
50
51 int v = a[0];
52 x[0]=a[0];
53 int k1 = 0;
54
55 for(int i = 1; i < n; i++)
56 {
57 if(v!=a[i])
58 {
59 v = a[i];
60 k1++;
61 x[k1] = a[i];
62 }
63 }
64
65 v = b[0];
66 y[0]=b[0];
67 int k2 = 0;
68
69 for(int i = 1; i < m; i++)
70 {
71 if(v!=b[i])
72 {
73 v = b[i];
74 k2++;
75 y[k2] = b[i];
76 }
77 }
78
79
80 int maxn = 0, flag = 0;
81 int i1, j1, start;
82
83 for(int i = 0; i <= k1; i++)
84 {
85 for(int j = 0; j <= k2; j++)
86 {
87 i1 = i;
88 j1 = j;
89 flag = 0;
90 //printf("xmx\n");
91 for(int k = 0; k <= k1&&i1<=k1&&j1<=k2; k++)
92 {
93 if(x[i1] == y[j1])
94 {
95 flag++;
96 i1++;
97 j1++;
98 }
99 else
100 {
101 break;
102 }
103 }
104 if(maxn <= flag)
105 {
106 maxn = flag;
107 start = i;
108 }
109 }
110 }
111 if(maxn > 0)
112 {
113 v = x[start];
114 c[0]=x[start];
115 int k = 0;
116
117 for(int i = 1; i < maxn; i++)
118 {
119 if(v!=x[start+i])
120 {
121 v = x[start + i];
122 k++;
123 c[k] = x[start + i];
124 }
125 }
126 qsort(c,k+1,sizeof(c[0]),cmp2);
127 for(int i=0; i<=k; i++)
128 {
129 printf("%d ",c[i]);
130 d[i].data=c[i];
131 d[i].ge=c[i]%10;
132 }
133 printf("\n");
134 qsort(d,k+1,sizeof(d[0]),cmp3);
135 for(int i=0; i<=k; i++)
136 printf("%d ",d[i].data);
137 printf("\n");
138
139 }
140 else
141 {
142 printf("NONE\n");
143 }
144 }
145
146 return 0;
147 }
poj Problem A. Score Sequence(暴力),布布扣,bubuko.com
时间: 2024-08-07 04:34:13