• 灵梦的计算机


    题目描述
    博丽灵梦(HakureiReimu)在成功抢回八云紫(YakumoYukari)用隙间偷走的香火钱后,她和依神紫苑(YorigamiShion)去香霖堂买东西啦!

    灵梦想买一个计算器来计算神社的香火钱,但是因为香霖堂的东西太贵了,她选择使用河童重工网络(KawashiroNitori’sNetwork,KNN)网购一个Casio计算器。

    但出人意料的是,灵梦使用KNN买回来的Casio是个假货,最多只能显示整数部分(即向下取整)。

    灵梦很苦恼,因为这个计算器可能会导致一些特别大的误差。所以灵梦想让拥有外界的式神(指电脑)的你帮她解决一个问题。

    灵梦得到了三个实数n,a,b(4≤n≤5,5≤a,b≤10),她成功地计算了na+nb,得到了一个只显示整数部分的结果。

    灵梦想知道,若存在一个实数m(m≥0),使得ma+mb的结果在计算器上与na+nb的结果显示出来完全一致时,m的变化范围,即的最大值与最小值之差。

    如果你不知道如何计算nk,请使用cmath库的pow()函数,pow(n,k)的结果即为nk的结果。

    为了提高本题的难度,灵梦给你设置了组询问。而为了在某种程度上减少你的输入和输出量,我们采用以下的代码来生成询问(代码来自河童重工):

    在调用 Mker::init() 函数之后,你第i次调用 Mker::read(n,a,b) 函数后得到的便是第i次询问的ni,ai和bi。

    为了减少你的输出量,令第i次询问的答案为si,你只需要输出。如果你的答案与标准答案的绝对误差在10-2以内,你的答案则被视为是正确答案。
    为了让你更好地做题,这里给出了关于op的说明:
    当op=1时,有a=b,否则无特殊限定。

    输入
    输入共一行,包含3个正整数T,seed,op,含义见题目描述。

    输出
    输出共一行,输出题目描述中要求输出的答案。

    样例输入
    复制样例数据
    500 233 0
    样例输出
    0.00503

    提示
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    这个ans 进行了两次迭代, 前面一次是取f1(x) , 后面的是在f2(x) ,但是他们的导数都是一样的,所以分母相同,
    可以先看看这个 , 然后在看这题解 牛顿迭代
    正宗题解

    
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    namespace Mker {
    #define uint unsigned int
        uint sd;
        int op;
        inline void init() {
            scanf("%u %d", &sd, &op);
        }
        inline uint uint_rand() {
            sd ^= sd << 13;
            sd ^= sd >> 7;
            sd ^= sd << 11;
            return sd;
        }
        inline double get_n() {
            double x = (double) (uint_rand() % 100000) / 100000;
            return x + 4;
        }
        inline double get_k() {
            double x = (double) (uint_rand() % 100000) / 100000;
            return (x + 1) * 5;
        }
        inline void read(double &n,double &a, double &b) {
            n = get_n();
            a = get_k();
            if (op) b = a;
            else b = get_k();
        }
    }
    using namespace Mker;
    int T;
    double n, a, b, k, ans;
    int main() {
        scanf("%d", &T);
        init();
        while (T--) {
            read(n, a, b);
            k = a * pow(n, a - 1) + b * pow(n, b - 1);
            ans += 1 / k;
        }
        printf("%0.5f", ans);
    }
    
    每次做题提醒自己:题目到底有没有读懂,有没有分析彻底、算法够不够贪心、暴力够不够优雅。
  • 相关阅读:
    vim编辑中断后,重新编辑的警告删除
    更新centos7的kernel
    centos7 设置连接无线wifi
    U盘安装centos7
    centos7清理矿机木马qw3xT,kpgrbcc
    centos7 防火墙屏蔽IP
    ftp用户和密码
    聚类结果的评估指标及其JAVA实现
    java.io.Serializable浅析
    JAVA中求解对象所占字节大小
  • 原文地址:https://www.cnblogs.com/spnooyseed/p/12870899.html
Copyright © 2020-2023  润新知