• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            PouringWater (SRM 439 Div2 500)

            題目鏈接:http://www.topcoder.com/stat?c=problem_statement&pm=10408&rd=13747

            最終的水要放在K個瓶子里面,而每個瓶子中的水的數量必須為2的整數冪,即最終的水數量n'要能分解成
            k個2的整數冪,也就是new_n的二進制表示中1的個數要<=k.

            用count(n)表示n的二進制表示中1的個數,如果count(n)<=k,那就不需要買瓶子了。
            如果count(n)>k,說明我們要找到第一個n'使得n'>n并且count(n')<=k。那就是說我們要減少n中1的個數。
            我們把n表示為x0ab.其中a為全1,b為全0. a,b的長度>=0.
            很明顯,第一個減少1的個數的n'應該為x1{(a+b)個0},也就是把ab全部變成0.ab前的0變為1.即加上一個1<<length(b).
            因為對b來說,無論增加多少都會增加1的個數。
            然后再判斷n'的1的個數,直到count(n)<=k。
            因為n最大為10^7,n'最大為10^8,int類型不會溢出。因此邊界條件就無需判斷了。

             1 #include <vector>
             2 #include <algorithm>
             3 #include <sstream>
             4 #include <string>
             5 #include <iostream>
             6 
             7 using namespace std;
             8 
             9 int count(int i)
            10 {
            11     int res = 0;
            12     while(i!=0){
            13         i&=(i-1);
            14         res++;
            15     }
            16 
            17     return res;
            18 }
            19 
            20          class PouringWater
            21               { 
            22               public
            23               int getMinBottles(int N, int K) 
            24                   { 
            25                       int res = 0;
            26                       int mask = 1;
            27 
            28                       while(count(N)>K){

            29                            //找到第一個1...第n次犯了沒把N&mask括號括起來的錯誤了。。。&的優先級<等號...
            30                           while( (N&mask)==0) mask<<=1;

            31                           //加上mask使得1的數目減少
            32                           N+=mask;
            33                           res += mask; 
            34                       }
            35 
            36                       return res;
            37                   } 
            38              
            39 




            posted on 2009-06-03 20:31 YZY 閱讀(291) 評論(0)  編輯 收藏 引用 所屬分類: AlgorithmTopCoder

            導航

            <2009年6月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            統計

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            无码超乳爆乳中文字幕久久| 精品熟女少妇aⅴ免费久久| 天天影视色香欲综合久久| 久久久人妻精品无码一区| 亚洲国产日韩综合久久精品| 一级做a爰片久久毛片16| 久久91亚洲人成电影网站| 人人狠狠综合久久亚洲高清| 亚洲av伊人久久综合密臀性色 | 国产精品内射久久久久欢欢| 久久黄视频| a级毛片无码兔费真人久久| 中文字幕人妻色偷偷久久| 一本色道久久88加勒比—综合| 久久久久亚洲AV成人网人人网站| 亚洲乱亚洲乱淫久久| 久久久这里只有精品加勒比| 青青国产成人久久91网| 少妇久久久久久久久久| 国产午夜精品久久久久九九电影| 日韩欧美亚洲综合久久| 久久一区二区三区免费| 久久精品国产99国产精偷| 亚洲国产精品无码久久久不卡| 一本久久久久久久| 久久精品无码专区免费青青| 亚洲日本久久久午夜精品| 大蕉久久伊人中文字幕| 2022年国产精品久久久久| 性色欲网站人妻丰满中文久久不卡| 久久AⅤ人妻少妇嫩草影院| 亚洲成色WWW久久网站| 久久伊人五月天论坛| 日本国产精品久久| 久久亚洲国产精品123区| 久久AAAA片一区二区| 久久久久99精品成人片牛牛影视 | 久久精品a亚洲国产v高清不卡| 精品国产乱码久久久久软件| 亚洲欧美日韩久久精品第一区| 亚洲午夜精品久久久久久人妖|