首页 > 编程语言 >「ACM 算法实践」[解题报告]时间管理大师

「ACM 算法实践」[解题报告]时间管理大师

时间:2023-03-22 17:44:23浏览次数:41  
标签:二分 return int db mid ACM 算法 解题 include

分析

一开始想着应该要分情况讨论,如果每台电脑的耗电量都小于 \(e\) ,那么可以知道小 Q 是可以一直学习下去的,如果存在电脑的耗电量大于等于 \(e\) ,贪心的想法是将每台电脑能用的时间从小到大排序,然后丢进优先队列里,再考虑给谁充电,这样一来情况就非常复杂了。

正确的做法是二分答案 \(t\) ,计算每台电脑运行到 \(t\) 时间需要的电量,再计算出充电需要的总时间与 \(t\) 进行比较。

之后做题的时候也应该看看答案是否单调,然后考虑能不能用二分做,而不是看到明显的二分答案的问题才考虑(这种问题很多情况下也不是用的二分)。要知道,二分的一个最大的优势就是可以在已知的「答案」下按照这个答案模拟,看能否符合条件即可,不太需要考虑各种各样的策略,从而也就简化了复杂的条件。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

typedef double db;
typedef long long ll;

int gi() {
    char c = getchar(); int x = 0, f = 1;
    for ( ; !isdigit(c); c = getchar()) if (c == '-') f = -1;
    for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
    return x * f;
}

const int N = 1e5 + 5;
const double eps = 1e-8;

int n, e;
int a[N], b[N];

bool check(db t) {
    db need = 0;
    for (int i = 1; i <= n; ++i) {
        db tmp = (db)a[i] * t;
        if (tmp > (db)b[i]) need += (tmp - (db)b[i]) / (db)e;
    }
    return need <= t;
}

int main() {
    ll s = 0;
    bool flg = 0;
    n = gi(), e = gi();
    for (int i = 1; i <= n; ++i) {
        a[i] = gi(), b[i] = gi();
        s += a[i];
    }
    db l = 0, r = 1e10;
    if (s <= e) { puts("-1"); return 0; }
    while (r - l > eps) {
        db mid = (l + r) / 2;
        if (check(mid)) l = mid;
        else r = mid;
    }
    printf("%.10lf\n", l);
    return 0;
}

标签:二分,return,int,db,mid,ACM,算法,解题,include
From: https://www.cnblogs.com/huangliwen/p/17244899.html

相关文章

  • 「ACM 算法实践」[解题报告]沙滩拾贝
    分析因为是与运算,只有当这\(m\)个数的第\(k\)位上都是\(1\)的时候才能使得最后的数的第\(k\)位为\(1\)。为了让最后的开心程度最大,我们优先将高位取\(1\),也......
  • 利用Mahout实现在Hadoop上运行K-Means算法
    class="full-post-title">利用Mahout实现在Hadoop上运行K-Means算法  一、介绍Mahout   Mahout是Apache下的开源机器学习软件包,目前实现的机器学习算法主要包含有协......
  • 高斯模糊的算法
    通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。算法有很多种,其中有一种叫做"高斯模糊"(GaussianBlur)。它将正态分布(又名"高斯分布")用于图像处理。本文介......
  • 机器学习算法
    一、分类算法(一)贝叶斯 (二)决策树ID3、C4.5(C5.0)、CART、PUBLIC、SLIQ和SPRINT(三)神经网络 (四)SVM (五)KNN (六)Bagging 和Boosting (七)最大熵(八)Logistic 回归(九)感知机二、聚类......
  • 复杂度分析:如何分析、统计算法的执行效率和资源消耗
    作者:京东物流崔旭我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指......
  • 算法的时间复杂度和空间复杂度
    常用的算法的时间复杂度和空间复杂度 排序法最差时间分析平均时间复杂度稳定度空间复杂度冒泡排序O(n2)O(n2)稳定O(1)快速排序O(n2)O(n*log2n)不稳定O(log2n)~O(n)选择排......
  • 一种高效的适宜于海量数据排序的算法
    常用的排序算法:  冒泡序,快速排序,直接选择排序,堆排序,希尔排序,归并排序等;无指针分组排序算法  冒泡排序不适宜于逆序  快速排序算法能减少逆序时所消耗的扫描和数......
  • 机器学习算法(二): 朴素贝叶斯(Naive Bayes)
    机器学习算法(二):朴素贝叶斯(NaiveBayes)1.实验室介绍1.1实验环境1.python3.72.numpy>='1.16.4'3.sklearn>='0.23.1'1.2朴素贝叶斯的介绍朴素贝叶斯算法......
  • 机器学习算法(一): 基于逻辑回归的分类预测
    机器学习算法(一):基于逻辑回归的分类预测项目链接参考fork一下直接运行:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc1逻辑回归的介绍和应用1.1逻......
  • 数据结构算法学习前言
    数据结构算法学习写在前面:今天是2023-03-21,上一次接触算法是在公司导师的带领下,学习了数据结构算法,他一题一题讲给我的,但是当时却不太争气,并没有掌握太多,由于这段时间......