【2020 杭电多校第四场】1002 Blow up the Enemy

Blow up the Enemy

题意

有对父子在玩枪战游戏,有 n 把枪,,每把枪都有两个属性 A :攻击力 ,D:冷却时间。

初始都有 100 滴血,父亲会随机从 n 把枪里选择一把枪。

关于比赛有如下规定:

  1. 他俩第一枪一定是同时开的
  2. 能开枪就开枪
  3. 如果两人同时死亡,各有 50 % 的概率获胜

现在要你为儿子选择一把枪,使得其胜利的概率最大,输出这个概率

吐槽

读完这题,看到数据范围上来想的就是暴力,好傻啊,儿子肯定会选择杀掉 100 滴血最快的一把枪啊。

然后写代码的时候把时间最长的当做最厉害的枪了,交了5,6发都没有发现问题。

题解

直接判断杀掉 100 滴血最快的枪有几把,输出 (1.0 - x / 2 * n)

代码

#include <bits/stdc++.h>
#define emplace_back push_back
#define pb push_back
#define fuck system("pause")
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const double eps = 1e-6;
const int inf = 0x3f3f3f3f;
const int N = 2e5 + 10;

struct node
{
    int a, d;
} arr[N];

int main()
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        int n;
        scanf("%d", &n);
        int minn = inf, num = 0;
        for (int i = 1; i <= n; i++)
        {
            scanf("%d%d", &arr[i].a, &arr[i].d);
            int now = (99 / arr[i].a) * arr[i].d;
            if (now == minn)
                num++;
            else if (now < minn)
            {
                minn = now;
                num = 1;
            }
        }
        printf("%.6f
", (float)1.0 * (2 * n - num) / 2 / n);
    }
    // fuck;
    return 0;
}
原文地址:https://www.cnblogs.com/valk3/p/13408430.html