LA 3266 田忌赛马

https://vjudge.net/problem/UVALive-3266

题意:

田忌赛马,赢一局得200两银子,输一局赔200两银子,平局不赔不赚,问最多能赚多少银子。

思路:

先排序,然后比较两者最快的马,如果田忌的更快,就直接比。如果田忌的慢,先比较最慢的两匹马,如果田忌的快,则先让这两匹最慢的马比,之后继续比较第二慢的马,直到田忌的马慢于齐王的马时,用此时田忌最慢的马和齐王最快的马相比。

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 const int maxn = 1000 + 5;
 7 
 8 int a[maxn];
 9 int b[maxn];
10 int n;
11 
12 int main()
13 {
14     //freopen("D:\txt.txt", "r", stdin);
15     while (cin >> n && n)
16     {
17         for (int i = 0; i < n; i++)
18             cin >> a[i];
19         for (int i = 0; i < n; i++)
20             cin >> b[i];
21         sort(a, a + n);
22         sort(b, b + n);
23         int sum = 0;
24         int p1 = 0, p2 = n - 1, q1 = 0, q2 = n - 1;
25         while (n--)
26         {
27             if (a[p2]>b[q2])
28             {
29                 p2--;
30                 q2--;
31                 sum += 200;
32             }
33             else if (a[p1] > b[q1])
34             {
35                 p1++;
36                 q1++;
37                 sum += 200;
38             } 
39             else if (a[p1]<b[q2])   //用最慢的和齐王对快的比
40             {
41                 p1++;
42                 q2--;
43                 sum -= 200;
44             }
45             else             //平局的情况
46             {
47                 p1++;
48                 q2--;
49             }
50         }
51         cout << sum << endl;
52     }
53 }
原文地址:https://www.cnblogs.com/zyb993963526/p/6540067.html