蓝桥杯——最小化战斗力差距

贪心

        这题题目读着一开始感觉挺复杂的,感觉写起来挺麻烦的,但这都是这个题目的障眼法。

        题目最后只要求输出最小战斗力差距,只要这一个值!这意味根本不需要知道哪个人在哪个队伍,或者这是哪个人和哪个人和哪个人的差值。

        分成两个队伍,只要其中一个的最大值和另一个的最小值的差值最小就满足题目要求。

        举个例子:10 1000 100 1000 10000 100000

        对其进行排序:10 100 1000 1000 10000 100000

        发现其中差最小的是0,也就是1000与1000的差。将自左边的1000分为一队,右边剩下是一队,这就满足了题目的要求。

        所以只要寻找排序后的最小差值!就贪这一个心而已。

        题目要求的关键就是把一个排好序的序列按差值最小的部位进行左右分割罢了。只不过题目写的复杂吓人。

        所以最后输出最小差值即可。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 1e5 + 9;
ll w[maxn];
ll dif[maxn];

int main()
{
    int n; cin >> n;
    for (int i = 1; i <= n; i++) cin >> w[i];
    sort(w + 1, w + n + 1);

    for (int i = n - 1; i >= 1; i--) dif[i] = w[i + 1] - w[i];
    sort(dif + 1, dif + n);

    cout << dif[1];
    return 0;
}

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Java中,带分数可以用分数类来表示。下面是一个简单的带分数类的实现: ```java public class Fraction { private int integer; private int numerator; private int denominator; public Fraction(int integer, int numerator, int denominator) { this.integer = integer; this.numerator = numerator; this.denominator = denominator; simplify(); } private void simplify() { if (numerator < 0 && denominator < 0) { numerator = -numerator; denominator = -denominator; } if (denominator < 0) { numerator = -numerator; denominator = -denominator; } if (integer < 0 && numerator > 0) { numerator = -numerator; } if (integer < 0 && numerator == 0) { integer = -integer; } if (numerator >= denominator) { integer += numerator / denominator; numerator = numerator % denominator; } int gcd = gcd(numerator, denominator); numerator /= gcd; denominator /= gcd; } private int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b); } public Fraction add(Fraction other) { int newNumerator = this.numerator * other.denominator + other.numerator * this.denominator; int newDenominator = this.denominator * other.denominator; int newInteger = this.integer + other.integer; return new Fraction(newInteger, newNumerator, newDenominator); } public String toString() { if (integer == 0 && numerator == 0) { return "0"; } String result = ""; if (integer != 0) { result += integer; if (numerator != 0) { result += "_"; } } if (numerator != 0) { result += numerator + "/" + denominator; } return result; } } ``` 这个带分数类实现了以下功能: - 构造函数可以根据整数部分、分子和分母创建一个带分数对象。 - simplify() 方法可以将带分数对象化简,如将负号移到分子上、将整数部分和真分数部分合并、将分数化简等。 - add() 方法可以将两个带分数对象相加,返回一个新的带分数对象。 - toString() 方法可以将带分数对象转换为字符串形式。 这个类实现了带分数的加法操作,可以参考这个类来实现其他的运算操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值