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

      



  • 相关阅读:
    自己实现的string的库函数
    单链表的面试题
    顺序表的实现
    指针数组与数组指针
    指针与数组
    sizeof 与 strlen
    HTML配色工具!在线配色工具
    [转载] python的sorted函数对字典按key排序和按value排序
    [转载]python脚本删除一定时间以外的文件
    python基础教程(四)
  • 原文地址:https://www.cnblogs.com/szmssf/p/10834421.html
Copyright © 2011-2022 走看看