当前位置: 首页 > news >正文

(AC)储值购物

题目描述

Nanarikom 正在阅读童话故事。

故事的主人公是正在计划购物的豆娃。豆娃的钱包中有若干张储值卡。在一次购物中,豆娃可以支出 x 单位货币,其中 x 需为不大于 W 的正整数。然后,豆娃通过以下规则决定支付方式:

  • A. 在剩余额度大于等于 x 的储值卡中,豆娃选择剩余额度最小的一张储值卡进行支付;
  • B. 如果不存在这样的储值卡,则豆娃将新得到一张剩余额度为 W 的储值卡,并使用该储值卡支付;
  • C. 使用一张储值卡支付 x 单位货币后,这张储值卡的剩余额度减少 x,随后回到豆娃的钱包中。

豆娃计划进行若干次购物,使得总支出 ∑xi  恰等于给定值 V,而购物的次数和每次购物的支出可以自由分配。

Nanarikom 注意到,尽管总开支不变,但不同的购物方案可能使得豆娃获得不同数量的储值卡。现在,Nanarikom 想知道,在所有的购物方案中,豆娃获得的储值卡数量的最大值。

你需要回答 Nanarikom 的 T 组询问。

输入

第一行包含一个整数 T(1≤T≤1000),代表测试数据组数。对于每组测试数据:

一行包含两个整数 V, W(1≤V,W≤105),分别代表豆娃的总支出和每张储值卡的初始额度。

输出

对于每组测试数据,输出一行一个整数,代表储值卡数量的最大值。

样例输入

复制

3
5 1
5 2
1 10
样例输出

复制

5
3
1

第一次付W/2 得到一张W/2的卡

第二次付W/2+1 得到W/2-1 所以最大值还是W/2

求V/(W/2+1)

要考虑奇数的情况

代码 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int v,w;
void solve(){scanf("%d%d",&v,&w);if(w==1){printf("%d\n",v);return;}int ans=1;v-=w/2+(w%2);v=max(0,v);ans+=v/(w/2+1);printf("%d\n",ans);
}
int main(){int T;scanf("%d",&T);while(T--){solve();}return 0;
}

http://www.dtcms.com/a/302543.html

相关文章:

  • Android中主线程、ActivityThread、ApplicationThread的区别
  • 【氮化镓】GaN同质外延p-i-n二极管中星形与三角形扩展表面缺陷的电子特性
  • Python 实现服务器自动故障处理工具:从监控到自愈的完整方案
  • 日志分析-windows日志分析base--笔记ing
  • lesson26-2:使用Tkinter打造简易画图软件优化版
  • 深入解析MIPI C-PHY (五) MIPI C-PHY 与 A-PHY 的对比分析
  • 重生之我在暑假学习微服务第三天《Docker-上篇》
  • 【Unity笔记】Unity Camera.cullingMask 使用指南:Layer 精准控制、XR 多视图与性能提升
  • ERC20 和 XCM Precompile|详解背后技术逻辑
  • 学习Python中Selenium模块的基本用法(2:下载浏览器驱动)
  • js的学习2
  • JavaScript:数组常用操作方法的总结表格
  • Webhook技术深度解析:从原理到实现全指南
  • Item17:以独立语句将newed对象置入智能指针
  • MDM五十万台设备高并发场景解决方案【后台管理】
  • Taro 位置相关 API 介绍
  • C# 状态机以及状态机编程模式
  • Java设计模式-通俗举例
  • 【智慧物联网平台】编译jar环境 Linux 系统Maven 安装——仙盟创梦IDE
  • Leaflet 综合案例-聚类图层控制
  • django ManyToManyField 如何添加数据
  • Django缓存机制详解:从配置到实战应用
  • MGRE 实验
  • Django 视图详解(View):处理请求与返回响应的核心
  • Linux IPC实战:管道与命名管道的进程对话术
  • 语音识别数据增强
  • llama系列
  • 1688寻源通接口接入要点||电商API接口
  • 电脑ip地址在哪里看
  • 如何提升 TCP 传输数据的性能?详解