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 }