• codechef T3 计算器


    CALC: 计算器
    题目描述 大厨有一个计算器,计算器上有两个屏幕和两个按钮。初始时每个屏幕上显示的都是 0。没按 一次第一个按钮,就会让第一个屏幕上显示的数字加 1,同时消耗 1 单位的能量。 每按一次第二个按钮,会让第二个屏幕上显示的数字加上第一个屏幕上显示的数字,同时消 耗 B 单位的能量。 初始时,计算器有 N 单位的能量。大厨想知道在能量限制下,第二个屏幕上最大可以出现的 数字是多少?
    输入格式
    输入的第一行包含一个整数 T,代表测试数据的组数。接下来是 T 组数据。 每组数据仅有一行,包含两个整数 N 和 B。
    输出格式
    对于每组数据,输出一行,包含一个整数,代表所求的答案。
    数据范围和子任务 • 1 ≤ T ≤ 10,000 • 1 ≤ N,B ≤ 1,000,000,000 子任务 1(20 分): • 1 ≤ N,B ≤ 1,000
    子任务 2(80 分): • 无附加限制
    样例数据
    输入 3 10 2 8 5 6 1
    输出 12 3 9
    样例解释 对于第一组数据,可以使用 10 单位的能量,按一次第二个按钮耗费 2 单位的能量。大厨可以 按照下面的方案操作:

    操作 屏幕一数字 屏幕二数字 剩余能量

    按钮一 1 0 9

    按钮一 2 0 8

    按钮一 3 0 7

    按钮一 4 0 6

    按钮二 4 4 4

    按钮二 4 8 2

    按钮二 4 12 0

    这就是道数学题 我们设操作二次数为x 那么结果就是x*(n-k*x)  x取值范围是x<n/k 定点是n/2k 所以顶点也就是最大值一定能取到 当然因为x一定是整数所以还得找一波左右比较一下就好啦233

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define LL long long
    using namespace std;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int T,n,k;
    LL ans;
    LL get_max(LL x){return x*(n-k*x);}
    int main()
    {
        T=read();
        while(T--){
            n=read(); k=read();
            int v1=n/(2*k),v2=v1+1;
            ans=max(get_max(v1),get_max(v2));
            printf("%lld
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    大规模特征构建实践总结
    大数据分析在新型智慧能源建设中的应用
    非局部神经网络,打造未来神经网络基本组件
    异常处理机制
    myecplise debug时怎么看源码 和怎么导入项目中框架的源码
    mybatis 学习的总结
    oracle学习总结2(pl/sql 游标 异常的处理 存储过程和函数 包 触发器)
    Oracle学习的总结
    Oracle 11 g 2R安装以及sql Development
    SpringMVC源代码学习(六)HanderMapping详解
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7152962.html
Copyright © 2020-2023  润新知