#P1909 买铅笔 的题解
题目描述
P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P老师决定只买同一种包装的铅笔。
商店不允许将铅笔的包装拆开,因此P老师可能需要购买超过nn支铅笔才够给小朋 友们发礼物。
现在P老师想知道,在商店每种包装的数量都足够的情况下,要买够至少nn支铅笔最少需要花费多少钱。
输入格式
第一行包含一个正整数nn,表示需要的铅笔数量。
接下来三行,每行用22个正整数描述一种包装的铅笔:其中第11个整数表示这种 包装内铅笔的数量,第22个整数表示这种包装的价格。
保证所有的77个数都是不超过1000010000的正整数。
输出格式
11个整数,表示P老师最少需要花费的钱。
输入输出样例
输入 #1
输出 #1
输入#2
输出 #2
输入 #3
输出 #3
说明/提示
铅笔的三种包装分别是:
- 22支装,价格为22;
- 5050支装,价格为3030;
- 3030支装,价格为2727。
P老师需要购买至少5757支铅笔。
如果她选择购买第一种包装,那么她需要购买2929份,共计2 \times 29 = 582×29=58支,需要花费的钱为2 \times 29 = 582×29=58。
实际上,P老师会选择购买第三种包装,这样需要买22份。虽然最后买到的铅笔数 量更多了,为30 \times 2 = 6030×2=60支,但花费却减少为27 \times 2 = 5427×2=54,比第一种少。
对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买22份,实际的花费达到了 30 \times 2 = 6030×2=60,因此P老师也不会选择。
所以最后输出的答案是5454。
【子任务】
子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试 只解决一部分测试数据。
每个测试点的数据规模及特点如下表:

上表中“整倍数”的意义为:若为KK,表示对应数据所需要的铅笔数量nn—定是每种包装铅笔数量的整倍数(这意味着一定可以不用多买铅笔)。
题解
分析
使用位运算来进行大幅度累加,是倍增的思想
i<< 等同于 i*
题解
#include<bits/stdc++.h>
using namespace std;
int i,j,k,n,m,w,ans;
int main()
{
scanf("%d",&n);
for(i=;i<;i++)
{
scanf("%d%d",&j,&k);
m=j;
w=k;//输入并存下初始的价格与数量
while(j<n)
{
j<<=;
k<<=;//价格与数量不断*2直到数量大于n
}
while(j>n)
{
j-=m;
k-=w;//*2有可能导致买太多了,减去一些
}
while(j<n)
{
j+=m;
k+=w;//减去之后又可能太少了,加上一些
}
if(k<ans||ans==)
ans=k;//判断是否是最小花费
}
printf("%d\n",ans);
return ;//输出并返回
}
#P1909 买铅笔 的题解的更多相关文章
- 洛谷P1909 买铅笔
题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 333 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的 ...
- P1909 买铅笔
题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 33种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔 ...
- LuoGu P1909 买铅笔???
题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔. ...
- Java实现 洛谷 P1909 买铅笔
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(Strin ...
- 买铅笔(NOIP2016)
先给题目链接:买铅笔 这题非常水,没啥可分析的,先给代码: #include<bits/stdc++.h> //1 using namespace std; int main(){ int ...
- NOIP【2016普及组】 考后有感(买铅笔,回文日期,海港,魔法阵)
普及组考试已落下大幕,但我们那扑通扑通等待成绩的心仍然无法平静,先来给四道题做一个总结: 一. 买铅笔 自评难度:1星 其实这道题没有什么难度,生命之题,满分必拿,100分,保底啦~\(≧▽≦)/~ ...
- P1909 [NOIP2016 普及组] 买铅笔
如果她选择购买第一种包装,那么她需要购买29份,共计2×29=58支,需要花费的钱为2×29=58. 实际上,P老师会选择购买第三种包装,这样需要买22份.虽然最后买到的铅笔数 量更多了,为30×2= ...
- NOIP普及组:买铅笔
参加考试的时候,第一题我足足花了四十多分钟(因为那奇葩的键盘,幸好我向老师报告更换了键盘),还是只得了五十分... 题目描述: P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共 ...
- 2016年NOIP普及组复赛题解
题目涉及算法: 买铅笔:入门题: 回文日期:枚举: 海港:双指针: 魔法阵:数学推理. 买铅笔 题目链接:https://www.luogu.org/problem/P1909 设至少要买 \(num ...
随机推荐
- nmon+Java Nmon Analyser进行nmon监控数据可视化分析
我们知道nmon是一款轻量级的系统占用极少,监控功能非常强大支持跨平台ARM,centos,ubuntu等等系统的工具下载地:centos7 wget http://sourceforge.net/p ...
- opencv:形态学操作-腐蚀与膨胀
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- Spring JdbcTemplate类常用的方法
execute(String sql) 可执行任何sql语句,但返回值是void,所以一般用于数据库的新建.修改.删除和数据表记录的增删改. int update(String sql) int ...
- Shiro&Jwt验证
此篇基于 SpringBoot 整合 Shiro & Jwt 进行鉴权 相关代码编写与解析 首先我们创建 JwtFilter 类 继承自 BasicHttpAuthenticationFilt ...
- Python - 装饰器实现缓存
from functools import wraps def cache(func): cache = {} @wraps(func) def wrap(*args): if args not in ...
- 制作PPT时的一些技巧记录
1.当一页PPT上有很多图片,要选择其中一张图片时,发现图片都重叠了,不好选择时该怎么办? 2.对动画的编辑 技巧:与选择窗口配合使用
- numpy-sum函数
看一个例子就懂了 c = array([[[0, 1, 2, 0, 1, 2]], [[0, 1, 2, 0, 1, 2]]]) print('{0}\n'.format(c.shape)) prin ...
- Java进阶学习(2)之对象交互(上)
对象交互 对象交互 对象的识别 时钟小程序 把现实世界用对象去建模,去分解问题规模,最终抽象成对象和对象的模型 例如11:03的小程序,可以抽象成一个显示类,一个类生成两个对象去表示时钟 packag ...
- Java进阶学习(1)之类与对象(上)
package com.study; //自动售卖机 public class vmachine { private int price = 80; private int balance; priv ...
- type和object详解
python中的type和object详解 关于这篇博客 这篇博客主要描述Python的新风格对象(new-style objects),如下: <type 'type'>和<t ...