HDOJ-1052 Tian Ji -- The Horse Racing

:根据题目的描述,问题可以转化为“找到最大权值的完美二分匹配”。但又说:杀鸡焉用宰牛刀。暗示了有更简单的方法。

:个人认为用到了贪心的思想“用最差的马搏最好的马”。

View Code
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #define NL 1100
 5 
 6 int tian[NL], king[NL];
 7 
 8 int cmp(const void *a, const void *b)
 9 {
10     return *(int*)a - *(int*)b;
11 }
12 
13 int main()
14 {
15     int n;
16     while (scanf("%d", &n) != EOF && n) {
17         int i, j;
18         for (i=0; i<n; i++) {
19             scanf("%d", &tian[i]);
20         }
21         for (i=0; i<n; i++) {
22             scanf("%d", &king[i]);
23         }
24         qsort(tian, n, sizeof(tian[i]), cmp);
25         qsort(king, n, sizeof(king[i]), cmp);
26 /*        for (i=0; i<n; i++) {
27             printf("%d\n", king[i]);
28         }            */
29         int t1, t2, k1, k2, win=0;
30         t1 = k1 =  0;
31         t2 = k2 = n-1;
32         while (t1 <= t2 && k1 <= k2) {
33             if (tian[t1] > king[k1]) {
34                 ++t1;
35                 ++k1;
36                 ++win;
37             }else if (tian[t2] > king[k2]) {
38                 --t2;
39                 --k2;
40                 ++win;
41             }else if (tian[t1] < king[k1]) {
42                 ++t1;
43                 --k2;
44                 --win;
45             }else if (tian[t2] < king[k2]) {
46                 ++t1;
47                 --k2;
48                 --win;
49             }else if (tian[t1] < king[k2]) {
50                 ++t1;
51                 --k2;
52                 --win;
53             }else if (tian[t1] > king[k2]){
54                 ++t1;
55                 --k2;
56                 ++win;                
57             }else {
58                 ++t1;
59                 --k2;
60             }
61         }
62 //        printf("t = %d\n", t);
63         printf("%d\n", 200*win);
64     }
65     return 0;
66 }
67 /*
68 4
69 1 2 3 4
70 2 3 4 1
71 3
72 1 1 1
73 1 1 1
74 3
75 90 80 70
76 90 89 79
77 */

 

转载于:https://www.cnblogs.com/superbin/archive/2012/10/13/2722707.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值