[codechef July Challenge 2017] Calculator
2024-08-27 02:57:05
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 单位的能量。大厨可以
按照下面的方案操作:
我们假设按了x次一号按钮,y次二号按钮,则由贪心的想法(即现一次性按完按钮1,再按完按钮2)得知x,y满足:
x+By=N,求x*y的最大值。
则x=N-By,折ans=x*y,则ans= -By^2+Ny
这是一个二次函数,顶点在-b/2a,也就是 N/2B。由于x,y是整数,所以除了取x=N/2B,还要取x=N/2B-1,x=N/2B+1等算一下(因为顶点不一定就是整点)。
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> using namespace std; int main(){ int T; scanf("%d",&T); for (; T; T--){ long long N,B; scanf("%lld%lld",&N,&B); *B),x; long long ans=(-B*y+N)*y; x=y-,ans=max(ans,(-B*x+N)*x); x=y,ans=max(ans,(-B*x+N)*x); x=y+,ans=max(ans,(-B*x+N)*x); printf("%lld\n",ans); } ; }
最新文章
- 使用jQuery封装实用函数
- 安装UnityVS 2012步骤
- JavaScript权威指南(第六版)--JavaScript概述 DEMO
- ASP.NET的学习之asp.net整体运行机制
- 关于Talend的Patch分支对应Eclipse开发环境的配置总结.
- 微信跳一跳的mini辅助设计
- Python面向对象篇(3)-封装、多态、反射及描述符
- vue实现懒加载的几种方法
- [bzoj省选十连测推广赛2]T2七彩树
- python全栈开发 * css 选择器 浮动 * 180808
- c语言宏开关 使用
- PPT制作
- springboot2.X访问静态文件配置
- CCPC-Wannafly Winter Camp Day8 (Div2, onsite)
- Python实例---模拟微信网页登录(day5)
- BootStrap行内编辑
- ASP.NET重写Render 加载CSS样式文件和JS文件(切换CSS换皮肤)
- 在Eclipse中Attach Source
- Mybatis实现原理探究-实现部分Mybatis功能(上)
- new FileInputStream(file)中file不能为文件夹
热门文章
- BZOJ 1055: [HAOI2008]玩具取名(记忆化搜索)
- C++通过jsoncpp类库读写JSON文件-json用法详解
- Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用
- android studio 的基本使用和建立一个小项目
- python中while循环运算符及格式化输出
- MySql登陆密码忘记了怎么办?MySQL重置root密码方法
- VC.【转】采用_beginthread/_beginthreadex函数创建多线程
- linux 打开一个文件现swap文件
- vue中的slot插槽
- python Django 创建应用