详解【NOI Online】2020 入门级【T1 文具订购】

详解【NOI Online】2020 入门级【T1 文具订购】

题目描述
小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品:

  1. 圆规,每个 7 元。
  2. 笔,每支 4 元。
  3. 笔记本,每本 3 元。
    小明负责订购文具,设圆规,笔,笔记本的订购数量分别为 a,b,c,他订购的原则依次如下:
  4. n 元钱必须正好用光,即 7a+4b+3c=n。
  5. 在满足以上条件情况下,成套的数量尽可能大,即 a,b,c 中的最小值尽可能大。
  6. 在满足以上条件情况下,物品的总数尽可能大,即 a+b+c 尽可能大。
    请你帮助小明求出满足条件的最优方案。可以证明若存在方案,则最优方案唯一。

输入
从文件 order.in 中读入数据。
仅一行一个整数 n 表示班费数量。

输出
输出到文件 order.out 中。
若方案不存在则输出 -1。否则输出一行三个用空格分隔的非负整数 a,b,c 表示答案。

样例输入
【样例1输入】
1
【样例2输入】
14
【样例3输入】
33

样例输出
【样例1输出】
-1
【样例2输出】
1 1 1
【样例3输出】
1 2 6

数据范围限制
对于测试点 1 ∼ 6:n ≤ 14。
对于测试点 7 ∼ 12:n 是 14 的倍数。
对于测试点 13 ∼ 18:n ≤ 100。
对于所有测试点:0 ≤ n ≤ 10^5 。

提示
【样例3解释】
a=2,b=4,c=1 也是满足条件 1,2 的方案,但对于条件 3,该方案只买了 7 个物品,不如 a=1,b=2,c=6 的方案。

解析:8
题目看看就好了,我们直接切入正题,这题不就是是一个非常非常水的模拟吗?O(n^3)不香吗?
拜托,这题再水也没你说的那么水吧。恭喜你只有50分~60分,好歹你也得想到一个O(n^3/84),就是枚举每个文具,然后分别除以3,4,7,就是说中间做操作的时候就不用那么麻烦了,也省时间。
想到这还是过不了呀,那咋办。听说有个叫百鸡问题的题目,我们可以用2个数笔表示另一个呀,所以就变成O(n^2/28),发现如果用C++而且打的漂亮一点,居然AC了。
但是比赛的时候,是绝对没有那个漂亮的(O2优化),所以,我们可以把题目回忆+模拟一下。发现没,
除了n=1,2,5的时候都可以,那么,是不是很开心呢?感觉可以轻松AC了吧,如果还不懂的话,请继续看,7+4+3=14,这么多为一套,如果一套不行那么以后都不行了,所以只用枚举1~13即可。

O(1)算法!!!

那枚举的时候该怎么枚举呢?凡是有余数的,把余数补回去
然后自己算一下应该怎么才最划算而且a+b+c要尽可能大,所以最小的,应该尽量多。
视频讲解:详解【NOI Online】2020 入门级【T1 文具订购】
附上AC C++代码:

#include<cstdio>
#include<iostream>

using namespace std;
 
int main()
{
   
	freo
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为给选手提供一个锻炼的机会,CCF拟举办一场NOI Online能力测试。测试分为入门组和提高组,每组限额报名3万人,人数报满关闭系统,每组成功报名选手在同一时间参加线上测试。 一、测试时间: 提高组:3月7日8:30-12:00 入门组:3月7日14:30-18:00 二、测试方式: 1.选手报名成功后,根据系统生成的准考证号和密码登陆测试系统。 2.测试试题均采用电子版,每组3道题目。选手在线提交源程序,测试系统离线统一评测。 三、报名资格及时间: 1.因本次测试为限额参加,为给更多选手机会,每位选手限报名一组测试。如每组人数报满,系统会提前关闭。曾在CSP-J/S2019第二轮获一级的选手具有优先权。 2.分阶段报名: 第一阶段为CSP-J/S2019第二轮一级选手报名,时间:即日起至2月20日24:00截止; 第二阶段为开放报名,时间:2月21日-26日24:00截止。 四、报名方式: 1.测试费用:免费 2.报名网址:http://rg.noi.cn/(点击下载使用说明) 3.参加者请如实填写个人信息报名,包括但不限于姓名、身份证号、出生日期、性别、就学(学籍学校)/就职单位等。 4.测试前公布选手对应的动态地址,请关注邮件及NOI网站通知。 五、评测及成绩 本次测试不评奖、不颁发证书。3月20日前公示测试成绩前25%名单 六、咨询邮箱:noi@ccf.org.cn 此通知。 中国计算机学会 2020年2月17日

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值