当前位置: 代码迷 >> 综合 >> zcmu-1059: 田忌赛马(贪心算法)
  详细解决方案

zcmu-1059: 田忌赛马(贪心算法)

热度:73   发布时间:2023-12-26 10:27:22.0

1059: 田忌赛马

Time Limit: 1 Sec  Memory Limit: 128 MB

Submit: 1320  Solved: 353

[Submit][Status][Web Board]

Description

田忌和齐王赛马,两人各出n匹马,赢一场比赛得200两银子,输了赔200银子,平局不赔不赚.已知两人每匹马的速度,问田忌最多能赢多少银子.

Input

多组测试数据,

每组数据的第一行是一个整数n。 (1<=n<=1000)

第二行包括n个整数既田忌每匹马的速度.

第三行包括n个整数既齐王每匹马的速度.

每匹马的速度不超过1000.

Output

对于每组数据输出一行有一个整数代表田忌最多能赢多少银子

Sample Input

3

92 83 71

95 87 74

2

20 20

20 20

2

20 19

22 18

Sample Output

200

0

0

 

贪心算法简单应用吧~思路见注释~

参考博客:https://blog.csdn.net/qq_41489727/article/details/80410707

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int a[maxn],b[maxn];
bool cmp(int a,int b){//降序 return a>b;
}
int main()
{int n;while(~scanf("%d",&n)){int i,j,lena,lenb;memset(a,0,sizeof(a));memset(b,0,sizeof(b));for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)scanf("%d",&b[i]);sort(a,a+n,cmp);//降序排列 sort(b,b+n,cmp);i=0;j=0;int sum=0;lena=lenb=n-1;for(i,j;i<=lena;){if(a[lena]>b[lenb]){//如果田忌最慢的马比齐王最慢的马快,那么赢一场。sum++;lena--;lenb--;}else if(a[i]>b[j]){ //如果田忌最快的马比齐王最快的马快,也赢一场 sum++;i++;j++;}else{//.如果田忌最慢的马比齐王最慢的马慢或者最快的比最快的慢,那么田忌最慢的干齐王最快的,这样肯定会输,除了相等的情况。 if(a[lena]!=b[j])sum--;lena--;j++;}}cout<<sum*200<<endl;}return 0;
}