题意:田忌和齐王赛马,每个人有n匹马,给出了这2*n匹马的速度,速度大的赢,赢一场赚200两银子,输一场赔200两银子,问田忌最多赢多少银子。

题解:田忌赛马故事都听过,下等马对上等马,上等马对中等马,中等马对下等马,赢两场输一场,根据这个思路,先排序,然后如果田忌下等马可以赢齐王下等马,或田忌上等马可以赢齐王上等马,就直接res += 200,否则就让田忌下等马对齐王上等马,如果下等马和上等马相等res不变,否则 res -= 200。

#include <stdio.h>
#include <algorithm>
using namespace std;
const int N = 1005;
int n, v1[N], v2[N], res;

int main() {
	while (scanf("%d", &n) == 1 && n) {
		res = 0;
		for (int i = 0; i < n; i++)
			scanf("%d", &v1[i]);
		for (int i = 0; i < n; i++)
			scanf("%d", &v2[i]);
		sort(v1, v1 + n);
		sort(v2, v2 + n);
		int a1 = 0, a2 = n - 1, b1 = 0, b2 = n - 1;
		for (int i = 0; i < n; i++) {
			if (v1[a1] > v2[b1]) {
				a1++;
				b1++;
				res += 200;
			}
			else if (v1[a2] > v2[b2]) {
				a2--;
				b2--;
				res += 200;
			}
			else if (v1[a1] == v2[b2]) {
				a1++;
				b2--;
			}
			else {
				a1++;
				b2--;
				res -= 200;
			}
		}
		printf("%d\n", res);
	}
	return 0;
}