两则题解 - POJ 2585(aka SCU 4521),SCU 4460
POJ 2585 (拓扑排序)
某位置可能出现窗口的编号是一定的,所以本题只关心窗口的覆盖关系。这个覆盖关系是一个有向图,两窗口覆盖为一条有向边,而且没有环(判断依据)。表示有向图用一个邻接矩阵。
下面是 C++ 代码:邻接矩阵是表示一个图的常用存储表示。它用两个数组分别存储数据元素(顶点)的信息和数据元素之间的关系(边或弧)的信息。 阶为 n 的图 G 的邻接矩阵 A 是 n×n 的。将 G 的顶点标签为 v1 v2 ... vn。若 (vi,vj)∈E(G), Aij=1,否则 Aij=0。 无向图的邻接矩阵是对称矩阵。
1 |
|
SCU 4460 (贪心)
话说这题是三个月以前做的。
两个数列排序过后,从最大圈开始贪心即可。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int nlist[100000];
int mlist[100000];
int comp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
int main(void){
int t, ti, si, li, m, n, count;
scanf("%d",&t);
for (ti=0; ti<t; ti++){
scanf("%d%d", &n, &m);
for (si=0; si<n; si++) scanf("%d", &nlist[si]);
for (si=0; si<m; si++) scanf("%d", &mlist[si]);
qsort(nlist, n, sizeof(int), comp);
qsort(mlist, m, sizeof(int), comp);
li=n-1;
count=0;
for (si=m-1; si>=0; si--){
while (li>=0) {
li--;
if (mlist[si]>=nlist[li+1]) {count++;break;}
}
}
printf("%d\n", count);
}
}
本文参考了: 1.http://www.cnblogs.com/pony1993/archive/2012/08/16/2641904.html