zoukankan      html  css  js  c++  java
  • HDU

    题意:

    给出x,y两个值分别代表x个物品,总价为y
    有两种变化:
    1、使总价+1,数量不变
    2、数量+1,总价跟着变化 (y = y + y / x)

    思路:

    给出目标x,y,计算最少变化次使数量变化的只有一种,所以至少需要x-1次变化。

    每次增多数量的时候,先把单价提高到目标单价。(这样才会是最优解)
    对于每一次增高单价,我们可以用 (int)(当前数量 * 目标单价 - 当前总价) 得到差值,这个差值,即变化的次数,因为一次变化1。
    因为用了强转,所以会有精度问题,就是说我们在前面吧当前的单价变为了目标单价,但是由于强转,其实并没有单价一致,还需要继续变化

    这里用for循环代表数量变化

    剩下的用代码解释

    #include<iostream>
    
    using namespace std;
    
    int main() {
        double a, b;
        while (~scanf("%lf %lf", &a, &b)) {
            if (a > b) {
                printf("-1
    ");//无解情况
            } else {
                double index = (b + 1 - 1e-6) / a;
                //因为给出的总价可能是取整的,还原精度,这里精度不能太高会出错
                int ans = (int) a - 1;
                //数量变化直接计入结果
                double nowTotal = 1;
                //当前总价
                for (int i = 1; i <= (int) a; i++) {
                    int tmp = (int) (i * index - nowTotal);
                    //用当前数量*目标总价-当前总价=总价的差值,这也是变化的次数
                    nowTotal += tmp;
                    //改变当前总价
                    ans += tmp;
                    //计入变化次数
                    nowTotal = nowTotal * (i + 1) / i;
                    //这里用的for循环代表每次数量变化,当数量变化后,总价是需要变化的
                }
                printf("%d
    ", ans);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    MySql开启GTID和多线程复制功能
    MySQL自增锁等待问题解决
    MySQL超大表如何提高count速度
    MySQL如何计算重要的指标,来确定配置是否正确
    MySQL传输表空间使用方法
    用MySQL的optimizer_trace进行sql调优
    MySQL主从复制读写分离如何提高从库性能-实战
    Mongo创建文档
    Mongo索引
    Mongo开启查询日志
  • 原文地址:https://www.cnblogs.com/somliy/p/9705519.html
Copyright © 2011-2022 走看看