题目链接


这题是一个标准的高中线性规划题,用线性规划的方法按部就班的解,就能做出来。
设n件装备采用方案一,m建装备采用方案二。

不过!

通过观察我们可以发现

  • 如果y远小于x的时候,能做出来的最大数量就只能是y了。
  • 如果x远小于y的时候,能做出来的最大数量就是x/2了。
  • 两种方案,消耗两种材料的总数都是5的倍数,2个a和3个b总共是五个,4个a和1个b也总共是五个,所以说,x+y>=5*ans(制作的装备数量)

到此,我们找到了一个结论,ans=min(x/2,y,(x+y)/5)
所以得到代码

#include <bits/stdc++.h>using namespace std;
typedef long long ll;int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);ll x, y;int t;cin >> t;while (t--) {ll ans = 0;cin >> x >> y;cout << min((x + y) / 5, min(x / 2, y)) << endl;}return 0;
}

此题结束

但是!

试一下这组案例

5 5

显然只能制作一件装备

通过上面代码得到的答案却是2!!!

问题就出在这个(x + y) / 5上,我们采用任何一种方案之后,剩下的材料都不足以进行制作装备,但它却刚好是5的倍数。
这时候应该怎么处理?
通过观察我们发现,两种方案,消耗a的数量一定是偶数,
所以,如果x为偶数,那么,当x+y刚好是5的倍数时,材料刚好能全部消耗完
如果x为奇数,那么,当x+y刚好是5的倍数时,制作完所有的装备后,剩下材料的数量也刚好是5的倍数,而这时却无法制作装备。
只有在这种条件下,我们的结论会给出正确答案+1
所以,我们只要判断这一种特例就行了,写一个if…else…

才怪!

a材料消耗的数量一定是偶数,而我们的结论出错的时候,x是奇数,所以我们只要在x为奇数的时候,让x-1,让剩余材料构不成5的倍数,不就解决了吗!

所以,根据位运算的性质,我们让x与上111111111111……11110,就能在x为奇数的时候,减一
得到代码

#include <bits/stdc++.h>using namespace std;
typedef long long ll;int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);ll x, y;int t;cin >> t;while (t--) {ll ans = 0;cin >> x >> y;x &= 0x7ffffffe;cout << min((x + y) / 5, min(x / 2, y)) << endl;}return 0;
}

其实还有一种写法,就是

x -= x % 2;

不过,你看这个 f 按起来多带感(手动滑稽)

牛客练习赛59 4743 c 装备合成相关推荐

  1. 牛客练习赛59 C 装备合成(贪心+数学)

    题目链接 思路:贪心的尽量选第一种方案,设第一种方案用了k1次,第二种方案用了k2次,那么方程就是2k1+4k2=x,3k1+k2=y,那么就有10k1=4y-x,关键这里k1不一定是整数,所以k1这 ...

  2. 【牛客练习赛59】A:小乔和小灰灰

    比赛地址:https://ac.nowcoder.com/acm/contest/4743/A 题目描述 小乔和小灰灰是好朋友,现在如果一个字符串中同时出现子序列"XiaoQiao" ...

  3. 牛客练习赛59 小松鼠吃松果(优化dp二维偏序)

    小松鼠吃松果 非常nicenicenice的一道题 首先考虑dpdpdp 容易想到按照时间来排序 然后定义dp[i]dp[i]dp[i]为考虑前iii个果子且吃掉第iii个的最大价值 那么每次都去前面 ...

  4. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  5. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  6. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  7. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  8. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

  9. 牛客练习赛73 D 离别(线段树+右端点排序离线查询)

    牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...

最新文章

  1. python windows时间同步工具
  2. nginx假死导致的问题回顾
  3. android 接口定义常量,Android开发笔记(5):常量的合理使用
  4. 数据库中使用自增量字段与Guid字段作主键的性能对比(补充篇)-----转
  5. ubuntu安装php5.3
  6. C语言显示USDOS汉字库
  7. 浅谈Java回调机制
  8. 比大小 log_2^3 与 log_3^5
  9. Visual Studio快捷键大全
  10. 学习java第14天
  11. SF中对象发出消息后在chatter上显示名字的问题
  12. Android Button控件字母大小写显示问题
  13. java文件下载错误提示_java文件下载出错
  14. java基础(多态的理解与应用)
  15. 几种常用的电平转换方案
  16. 安卓drawable基本属性corners、solid、gradient、stroke、size、padding详解
  17. python 获取指定时区的时间——pytz
  18. pymongo查询列表元素_使用PyMongo查询MongoDB数据库!
  19. Nvida driver CUDA
  20. 信息学奥林匹克竞赛python_什么是USACO?来了解下美国信息学奥林匹克竞赛!

热门文章

  1. C#操作Oracle中大数据(Blob)
  2. Python+Django毕业设计校园食堂订餐系统(程序+LW+部署)
  3. farpoint支持python_Farpoint-中文手册
  4. Diffusion Model (扩散模型)
  5. java-net-php-python-jspm百色学院毕业生离校登记管理系统计算机毕业设计程序
  6. yepnope.js教程
  7. Java进阶重点分析
  8. Python网络爬虫实战(五)批量下载B站收藏夹视频
  9. 互联网时代?真人秀时代?
  10. 使用veu-cli3/4搭建vue项目详细配置