题意:田忌和王各有n匹马,每匹马有一个速度值,他俩赛马,赢者得200分,输者减200分,求田忌最多能得到多少分
分析:贪心思路来想,我们先考虑完所有田忌能赢的情况,然后再用最小成本去输:
-
- 先判断田忌最好的马是否能赛过王最好的马
-
-
- 如若不行则考虑田忌最差的马是否能赛过王最好的马
-
-
- 若还是不行则用田忌最差的马去赛王最好的马输掉一局(平局不算)
-
AC代码:
/*************************************************************************
> File Name: 1052.cpp
> Author: Akira
> Mail: qaq.febr2.qaq@gmail.com
> Created Time: 2017年01月17日 星期二 20时49分05秒
************************************************************************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<cmath>
#include<vector>
#include<set>
#include<list>
#include<ctime>
typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;
#define MST(a,b) memset(a,b,sizeof(a))
#define CLR(a) MST(a,0)
#define Sqr(a) ((a)*(a))
using namespace std;
#define MaxN 100000
#define MaxM MaxN*10
#define INF 0x3f3f3f3f
#define EPS 1e-8
#define bug cout << 88888888 << endl;
#define MIN(x,y) (x<y?x:y)
#define MAX(x,y) (x>y?x:y)
int n;
int A[1005];
int B[1005];
bool cmp(int a, int b)
{
return a>b;
}
int main()
{
while(~scanf("%d", &n) && n)
{
for(int i=0;i<n;i++) scanf("%d", &A[i]);
for(int i=0;i<n;i++) scanf("%d", &B[i]);
sort(A,A+n,cmp);
sort(B,B+n,cmp);
int win = 0;
int Ts = 0,Qs = 0;
int Te = n-1,Qe = n-1;
while(n--)
{
if(A[Ts] > B[Qs])
{
Ts++;
Qs++;
win++;
}
else
{
if(A[Te] > B[Qe])
{
Te--;
Qe--;
win++;
}
else if(A[Te]<B[Qs])
{
Te--;
Qs++;
win--;
}
}
}
printf("%d\n", win*200);
}
return 0;
}