zoukankan      html  css  js  c++  java
  • 杯子(glass)

    题目描述

    一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的瓶子)

    显然在某些情况下CC无法达到目标,比如N=3,K=1。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水),以到达目标。

    现在CC想知道,最少需要买多少新瓶子才能达到目标呢?

    输入输出格式

    输入格式:

    一行两个正整数, N,KN,K(1<=N<=10^9,,K≤1000)。

    输出格式:

    一个非负整数,表示最少需要买多少新瓶子。

    输入输出样例

    输入样例#1: 
    3 1
    
    输出样例#1: 
    1
    
    输入样例#2: 
    13 2
    输出样例#2: 
    3
    输入样例#3: 
    1000000 5
    输出样例#3:
     15808
     
     

    解析:

    由题意可知,每次只能由两个相同水量的杯子倒在一起,自然而然地想到和2n有关系。
    可以理解为贪心,贪心策略是每次去取现有杯子数的2的最多次方,把他们合并,合并k次,如果剩下杯子,就去再凑2的最小次方,缺多少就得买多少,,,
    这是海淀区赛的第一题,我在考场上忘记判零了,还好数据水。

     最后上AC代码

     1 #include<iostream>
     2 using namespace std;
     3 long long n,k,f,ans,s;
     4 int main()
     5 {
     6     cin>>n>>k;
     7     ans=n;
     8     for(int i=1;i<=k;i++)
     9     {
    10         f=1;
    11         while(f<ans)
    12         {
    13             f*=2;
    14         }
    15         f/=2;
    16         ans-=f;
    17     }
    18     if(f>ans)cout<<f-ans;
    19     else cout<<0;
    20     return 0;
    21 }
    View Code

      



  • 相关阅读:
    微软面试题
    20个开源项目托管站点推荐
    iis配置好后,解决打开服务器要输入用户名和密码的问题
    C# 调用带输入输出参数的存储过程
    line-height属性总结
    placeholder的字体样式改变,滚动条的颜色改变,ios日期兼容
    表格使用总结
    网页html结构搭建方法总结
    css中的inline-block
    css常用居中
  • 原文地址:https://www.cnblogs.com/szmssf/p/10834421.html
Copyright © 2011-2022 走看看