#P1909 买铅笔 的题解

摘要:
商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过nn支铅笔才够给小朋友们发礼物。现在P老师想知道,在商店每种包装的数量都足够的情况下,要买够至少nn支铅笔最少需要花费多少钱。输入格式第一行包含一个正整数nn,表示需要的铅笔数量。保证所有的77个数都是不超过1000010000的正整数。输入输出样例输入#11572223503043027ViewCode输出#1157ViewCode输入#2199982128233312823334128666ViewCode输出#2118407ViewCode输入#31999921011111319999411119999ViewCode输出#3189991ViewCode说明/提示铅笔的三种包装分别是:22支装,价格为22;5050支装,价格为3030;3030支装,价格为2727。
题目描述

P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P老师决定只买同一种包装的铅笔。

商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过nn支铅笔才够给小朋 友们发礼物。

现在P老师想知道,在商店每种包装的数量都足够的情况下,要买够至少nn支铅笔最少需要花费多少钱。

输入格式

第一行包含一个正整数nn,表示需要的铅笔数量。

接下来三行,每行用22个正整数描述一种包装的铅笔:其中第11个整数表示这种 包装内铅笔的数量,第22个整数表示这种包装的价格。

保证所有的77个数都是不超过1000010000的正整数。

输出格式

11个整数,表示P老师最少需要花费的钱。

输入输出样例

输入 #1

#P1909 买铅笔 的题解第1张#P1909 买铅笔 的题解第2张
1 57
2 2 2
3 50 30
4 30 27
View Code

输出 #1

#P1909 买铅笔 的题解第3张#P1909 买铅笔 的题解第4张
1 57
View Code

输入#2

#P1909 买铅笔 的题解第5张#P1909 买铅笔 的题解第6张
1 9998
2 128 233
3 128 2333
4 128 666
View Code

输出 #2

#P1909 买铅笔 的题解第7张#P1909 买铅笔 的题解第8张
1 18407
View Code

输入 #3

#P1909 买铅笔 的题解第9张#P1909 买铅笔 的题解第10张
1 9999
2 101 1111
3 1 9999
4 1111 9999
View Code

输出 #3

#P1909 买铅笔 的题解第11张#P1909 买铅笔 的题解第12张
1 89991
View Code
说明/提示

铅笔的三种包装分别是:

  • 22支装,价格为22;
  • 5050支装,价格为3030;
  • 3030支装,价格为2727。

P老师需要购买至少5757支铅笔。

如果她选择购买第一种包装,那么她需要购买2929份,共计2 imes 29 = 582×29=58支,需要花费的钱为2 imes 29 = 582×29=58。

实际上,P老师会选择购买第三种包装,这样需要买22份。虽然最后买到的铅笔数 量更多了,为30 imes 2 = 6030×2=60支,但花费却减少为27 imes 2 = 5427×2=54,比第一种少。

对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买22份,实际的花费达到了30 imes 2 = 6030×2=60,因此P老师也不会选择。

所以最后输出的答案是5454。

【子任务】

子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试 只解决一部分测试数据。

每个测试点的数据规模及特点如下表:

#P1909 买铅笔 的题解第13张

上表中“整倍数”的意义为:若为KK,表示对应数据所需要的铅笔数量nn—定是每种包装铅笔数量的整倍数(这意味着一定可以不用多买铅笔)。

题解

分析

使用位运算来进行大幅度累加,是倍增的思想

#P1909 买铅笔 的题解第14张#P1909 买铅笔 的题解第15张
1 i<<1 等同于 i*2
View Code

题解

#P1909 买铅笔 的题解第16张#P1909 买铅笔 的题解第17张
1 #include<bits/stdc++.h>
2 using namespacestd;
3 inti,j,k,n,m,w,ans;
4 intmain()
5 {
6     scanf("%d",&n);
7     for(i=0;i<3;i++)
8 {
9         scanf("%d%d",&j,&k);
10         m=j;
11         w=k;//输入并存下初始的价格与数量
12         while(j<n)
13 {
14             j<<=1;
15             k<<=1;//价格与数量不断*2直到数量大于n
16 }
17         while(j>n)
18 {
19             j-=m;
20             k-=w;//*2有可能导致买太多了,减去一些
21 }
22         while(j<n)
23 {
24             j+=m;
25             k+=w;//减去之后又可能太少了,加上一些
26 }
27         if(k<ans||ans==0)
28             ans=k;//判断是否是最小花费
29 }
30     printf("%d
",ans);
31     return 0;//输出并返回
32 }
View Code

免责声明:文章转载自《#P1909 买铅笔 的题解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇API安全(五)-参数校验用友U8凭证导入工具的使用方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

小程序真机上报错 for developer: some selectors are not allowed in component wxss , including tag name selectors, id selectors, and attribute selectors

在引用组件的组件和页面中使用后代选择器在某些极端情况下会产生意想不到的性能。如果是,请避免使用它们。子元素选择器只能在视图组件及其子节点之间使用,其他组件可能会导致意外情况。继承的样式(如字体和颜色)将从组件外部继承到组件内部。除了继承样式之外,app.wxss中的样式和组件所在页面的样式对于自定义组件无效。...

SpringBoot工程通过Maven引入自定义Jar包

A工程为:common工程打成jar包:common-0.0.1-SNAPSHOT.jar注意:A工程打包时要使用maven的插件进行打包,不然会打成SpringBoot的Jar包,无法使用。--字符集编码--˃打包时跳过测试配置1.8˂!...

WinForm 中 comboBox控件之数据绑定

作为列表类型,public class Info{public string Id{get;Name=“Li Si”};infoList.Add(info3);...

CSS躬行记(8)——裁剪和遮罩

裁剪最早是在CSS2.1时代由clip属性引入,但该属性只能应用于绝对定位的元素,并且只能裁剪成矩形。CSS3提供了强大的clip-path属性,突破了clip属性的众多限制,接下来将围绕clip-path属性展开讲解。3)裁剪路径对于复杂的形状,可以采用SVG来创建裁剪路径,实现自定义。2)替换元素的填充和定位CSS3引入了两个新属性,用于遮罩替换元素。...

Fiddler抓包7-post请求(json)(转载)

2.查看上图中的红色框:这里只支持application/x-www-form-urlencoded格式的body参数,即json格式。您需要检查JOSN列中的five和xml。1.如果遇到text/xml格式的正文,如下图所示...

Linux 安装.src.rpm源码包的方法

接下来是rpm安装过程。...