Description

陪审团制度历来是司法研究中的一个热议话题,由于陪审团的成员组成会对案件最终的结果产生巨大的影响,诉讼双方往往围绕陪审团由哪些人组成这一议题激烈争夺。 小 W 提出了一个甲乙双方互相制衡的陪审团成员挑选方法:假设共有 n 名候选陪审团成员,则由甲先提名 s 位候选人,再由乙在甲提名的 s 位候选人中选出 t 名,作为最终的陪审团成员。显然这里应当有n ≥ s ≥ t。假设候选人 k 对甲、乙的有利程度都可以用一个二元组(𝑥𝑘, 𝑦𝑘)来表示,𝑥𝑘越大说明候选人 k 对甲越有利,𝑦𝑘越大则对乙越有利。在此前提下,双方的目标都变得明确:甲要最大化最终陪审团 t 人的 x 之和,最小化 y之和,乙则反之。 现在甲方决定聘请你为律师,并且事先得知了乙方律师的策略:乙方律师会在你提名的 s 名候选人中选出 t 名使得这 t 人的 y 值之和最大,再保证 y 值之和最大的前提下使得 x 值之和尽量小(在对乙方最有利的前提下对甲方最不利)。 现在你应当慎重地提名 s 位候选人使得最终由乙方律师确定的 t 人 x 值和最大,若有多种方案,则应再使被乙方排除掉的 s-t人的 y 值和尽量大,在此基础上最大化 s 人的 x 值 之和,在此基础上最小化 s 人的 y 值 之和。 你的当事人并不关心你提名的具体是哪些人,只要你告诉他你提名的 s 人的 x 值之和 与 y 值之和。
 

Input

第一行包含三个整数 n,s,t。 接下来 n 行,每行两个整数分别表示𝑥𝑘, 𝑦𝑘。

Output

共一行两个整数,分别为 x 值之和与 y 值之和。 
 

Sample Input

3 2 1
2 1
3 4
5 2

Sample Output

7 3 
 

Data Constraint

对于 30%的测试数据n ≤ 20
对于 50%的测试数据n ≤ 100
对于 100%的测试数据𝑛 ≤ 100000, 𝑥, 𝑦 ≤ 1000000
 
做法:这题是一题比较绕的贪心,甲让自己最大的同时让乙没被选上的最大(意义在哪里。。。),看完题目我们可以发现,无论如何,乙
都不会选到Y值最小的S-T个人,于是我们排一遍序,将最后S-T个人排除在外的情况下选出T个x最大的,然后问题来了,我们要怎么让乙
选到这T个人?没有y值比这T个人最小的大就好了┑( ̄Д  ̄)┍。
代码如下:
 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <algorithm>
 5 #define N 100007
 6 #define LL long long
 7 using namespace std;
 8 int n, S, T;
 9 LL ans_x = 0, ans_y = 0, Site = 0;
10 struct arr
11 {
12     int x, y, site;
13 }e[N];
14 
15 int cmp(arr a, arr b)
16 {
17     if (a.x == b.x)    return a.site < b.site;
18     return    a.x > b.x;
19 }
20 
21 int Cmp(arr a, arr b)
22 {
23     if (a.y == b.y)    return a.x > b.x;
24     return a.y > b.y;
25 }
26 
27 int main()
28 {
29     scanf("%d%d%d", &n, &S, &T);
30     for (int i = 1; i <= n; i++)
31         scanf("%d%d", &e[i].x, &e[i].y);
32     sort(e + 1, e + n + 1, Cmp);
33     for (int i = 1; i <= n; e[i].site = i, i++);
34     sort(e + 1, e + n - S + T + 1, cmp);
35     for (int i = 1; i <= T; i++)
36     {
37         ans_x += e[i].x;
38         ans_y += e[i].y;
39         Site = Site > e[i].site ? Site : e[i].site;
40     }
41     sort(e + 1, e + n + 1, Cmp);
42     for (int i = 1; i <= S - T; i++)
43         ans_x += e[i + Site].x, ans_y += e[i + Site].y;
44     printf("%lld %lld", ans_x, ans_y);
45 }
View Code