前言
最近在看算法准备二战蓝桥杯,当我看到使用贪心算法做的时候我感觉有点不好理解,由于是我自己按照我的想法写了一下。
思路
赛马比赛的胜利是胜利的场数大于对方,所以我们知道如果有n匹马,最少要有n/2+1匹马比对方快,所以只需我们最快的n/2+1匹马比对方最慢的n/2+1匹马快就可以了,其余的获胜情况都是建立在这个最小获胜马匹数上的。那么思路如下。
1.先对双方的马进行排序,从小到大,可以使用sort函数。
2.我方的马匹最大是从n/2到n,对方最小马匹数是从1到n/2+1。
3.使用for循环进行比较统计,如果我方的马匹速度较大者的数量为n/2+1则说明我方胜利,其余情况均为失败(包括平局和失败)。
4.代码如下
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 30
int a[MAXN];
int b[MAXN];
int n;
bool success(int* a,int* b,int n) {
int r = n / 2 + 1;
int l = n / 2 ;
int num = 0;
sort(a + 1, a + n );
sort(b + 1, b + n );
for (int i = 1; i <=r; i++)
{
if (a[i+l]>b[i])
{
num++;
}
}
if (num==r)
{
return true;
}
return false;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i] >> b[i];
}
if (success(a,b,n))
{
cout << "胜利";
}
else
{
cout << "失败";
}
return 0;
}
这是我的第二篇博客希望之后的蓝桥杯考试可以顺利。谢谢大家的观看与学习。