测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A41779. 田忌赛马你一定听过田忌赛马的故事吧?如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛。赢一局,田忌可以得到200两银子,输一局,田忌就要输掉200两银子,平局的话不输不赢。请问田忌最多能赢多少银子?输入输入包含多组测试数据. 每组测试数据的第一行是一个整数n(1<=n<=1000),表示田忌和齐王都拥有n匹马。接下来一行是n个整数,表示田忌的马的…

填空题 困难

题目描述

田忌赛马

你一定听过田忌赛马的故事吧?

如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛。赢一局,田忌可以得到200两银子,输一局,田忌就要输掉200两银子,平局的话不输不赢。

请问田忌最多能赢多少银子?

输入

输入包含多组测试数据. 每组测试数据的第一行是一个整数n(1<=n<=1000),表示田忌和齐王都拥有n匹马。接下来一行是n个整数,表示田忌的马的速度,下一行也是n个整数,表示齐王的马的速度。 输入的最后以一个0表示结束。

输出

对每组数据,输出一个整数,表示田忌至多可以赢多少银子,如果田忌赢不了,就输出一个负数,表示田忌最少要输多少银子。

样例输入

3

92 83 71

95 87 74

2

20 20

20 20

2

20 19

22 18

0

样例输出

200

0

0

参考答案

#include <bits/stdc++.h> using namespace std; const int maxn = 1005; int a[maxn];//田忌的马的速度 int b[maxn];//齐王的马的速度 bool cmp(const int &a, const int &b){ return a>b;} int main() { int n; while (cin >> n) { if(n==0) return 0; for (int i =0; i <n; i++)cin >> a[i]; for (int i =0; i <n; i++)cin >> b[i]; sort(a , a + n, cmp); sort(b , b + n, cmp); int la = 0, ra = n-1; int lb = 0, rb = n-1; int ans = 0; while (la <= ra && lb <= rb) { if (a[la]>b[lb]) {ans++;la++;lb++;} else if (a[la]<b[lb]) {ans--;ra--;lb++;} else { if (a[la]==b[rb]) {ra--;rb--;} else if (a[ra]>b[rb]) {ans++;la--;rb--;} else {ans--;ra--;lb++;} } } cout<<ans*200<<endl; } return 0; }
上一题 下一题