田忌赛马:
题目大意:田忌和国王赛马,赢一局得200元,输一局输掉200元,平局则不得也不输。
先输入一个整数N,接下来一行是田忌的N匹马,下一行是国王的N匹马。当N为0时结束。用贪心搞
,分析一波:
赢:
赢的优先级最高。所以有可以赢的一定要先赢!
所以看头和尾巴有没有能赢的能赢直接赢
平: 这3种平局情况:
第一种 | 第二种 | 第三种 |
---|---|---|
1 2 | 1 1 | 1 2 3 |
1 2 | 1 2 | 1 1 3 |
交叉比直接比更有价值 所以平局的话直接让它和后面的拼
输: 这是最坏的结果,但我们要让它输得最有价值
所以要让最慢的与最快的比发挥最大价值
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 100005
int A[maxn]={0};
int B[maxn]={0};
int main()
{
int n;
while(cin>>n,n!=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);
sort(B,B+n);
int money = 0;
int L = 0,R = n-1;
int L1 = 0,R1 = n-1;
while(L<=R)
{
if(A[L]>B[L1])//头赢
{
L++;L1++;
money+=200;
}
else if(A[R]>B[R1])//尾赢
{
R--;R1--;
money+=200;
}
else//平和输
{
if(A[L]<B[R1])money-=200;/输
L++;R1--;
}
}
cout<<money<<endl;
}
return 0;
}