Uva Tian Ji -- The Horse Racing

来源:互联网 发布:ssh 端口修改 编辑:程序博客网 时间:2024/06/05 01:11

题目的意思是给你田忌和王的各自n匹马

你要安排他们的比赛顺序,田忌每次输赢都是加减两百分,最后输出田忌的最大分数


这里利用贪心的做法

1,如果田忌的最快马快于齐王的最快马,则两者比。(因为若是田忌的别的马很可能就赢不了了,所以两者比)2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比。(由于所有的马都赢不了齐王的最快马,所以用损失最小的,拿最慢的和他比)3,若相等,则比较田忌的最慢马和齐王的最慢马3.1,若田忌最慢马快于齐王最慢马,两者比。(田忌的最慢马既然能赢一个就赢呗,而且齐王的最慢马肯定也得有个和他比,所以选最小的比他快得。)3.2,其他,则拿田忌的最慢马和齐王的最快马比。(反正所有的马都比田忌的最慢马快了,所以这匹马必输,选贡献最大的,干掉齐王的最快马)
#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;int n;int tian[1005];int king[1005];bool cmp(int a, int b){return a > b;}int main(){while (cin >> n&&n) {for (int i = 0; i < n; i++)cin >> tian[i];for (int i = 0; i < n; i++)cin >> king[i];sort(tian, tian + n,cmp);sort(king, king + n,cmp);//for (int i = 0; i < n; i++)//cout<< king[i];int sum = 0;int front1 = 0, last1 = n - 1;int front2 = 0, last2 = n - 1;int cn = 0;while ((cn++) < n){if (tian[front1]>king[front2]){sum += 200;front1++;front2++;}else if (tian[front1] < king[front2]){sum -= 200;last1--;front2++;}else {if (tian[last1]>king[last2]){last1--;last2--;sum += 200;}else {if (tian[last1] < king[front2])sum -= 200;front2++;last1--;}}}cout << sum << endl;}return 0;}


0 0
原创粉丝点击