• <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>

            pku 3252

            2009年10月29日 星期四

            題目鏈接:PKU 3252 Round Numbers

            分類:排列組合+區間計數

            題目分析與算法原型
                     這道題目總的來說不是太難,但是實現起來細節比較多,所以WA了好多次,大致思路是,給你的兩個數,start和end ,分別求出1到start,以及1到end之間(包括start和end自身)的round number 的個數,然后兩個相減一下,就差不多是要求的數,當然了還需判斷一下start是不是也是round number是的話剛才減的結果還要加1。假設現在給你的數是a,那么求1到a之間的round number可以分兩步來進行,先求出a在二進制下的位數m,然后求出1到m-1位的二進制數的round number的和(這個不難,只是排列組合的計算),第二步就是要加上,二進制位數為m但《=a的所有二進制數中round number的個數。其實可以這樣考慮,設一個二進制數為101001100,那么從100000000到其之間的round number的數的個數可以這樣考慮,從第二位開始左往右掃描,碰到為1的時候將其變為0,然后此位后的位數任意組合的數都肯定小于原來的數,枚舉這個情況下(先記下當前0和1的個數,方便計算剩下的位數組合中round number的數目)的round number數目,然后繼續掃描一直到最后。
                    PS:此題代碼實現的有些繁瑣,有待改進..........

            Code:


              1
            #include<stdio.h>
              2int x[35];
              3int cal(int m,int a)
              4{
              5    int i,j=1,res=1;
              6    for(i=m-1;i>=m-a;i--)
              7    {
              8        res*=i;
              9        res/=j;
             10        j++;
             11    }

             12    return res;
             13}

             14int num(int m)
             15{
             16    int k,i,res=0;
             17    if(m%2==0)k=m/2;
             18    else k=m/2+1;
             19
             20    for(i=k;i<m;i++)res+=cal(m,i);
             21    return res;
             22}

             23int check(int n)
             24{
             25    int res=0,i,num=0,y[35];
             26    int nn=n;
             27    while(nn)
             28    {
             29        y[res++]=nn%2;
             30        nn/=2;
             31    }

             32    for(i=0;i<res;i++)
             33        if(y[i]==0)num++;
             34        else num--;
             35    
             36    if(num>=0)return 1;
             37    else return 0;
             38}

             39int weishu(int n)
             40{
             41    int res=0,y[35];
             42
             43    int nn=n;
             44    while(nn)
             45    {
             46        y[res++]=nn%2;
             47        nn/=2;
             48    }

             49    return res;
             50}

             51int jisuan(int n)
             52{
             53    int k,i,j,y[35],num=0;
             54
             55    int nn=n;
             56    while(nn)
             57    {
             58        y[num++]=nn%2;
             59        nn/=2;
             60    }

             61    k=num/2-1;
             62    for(i=0;i<=k;i++)
             63    {
             64        int t=y[i];
             65        y[i]=y[num-1-i];
             66        y[num-1-i]=t;
             67    }

             68    int num1=1,num0=0,ss,kk,res=0;
             69    for(i=1;i<num;i++)
             70    {
             71        if(y[i]==1)
             72        {
             73            num0++;
             74            ss=num-i-1;
             75
             76            if(ss+num1-num0<0)kk=0;
             77            else
             78            {
             79                if((ss+num1-num0)%2==0)kk=(ss+num1-num0)/2;
             80                else kk=(ss+num1-num0)/2+1;
             81            }

             82            if(kk<ss)
             83            {
             84                int mm,q,ii;
             85                for(ii=kk;ii<=ss;ii++)
             86                {
             87                    mm=1;
             88                    if(ii==0)res+=1;
             89                    else
             90                    {
             91                        q=1;
             92                        for(j=ss;j>ii;j--)
             93                        {
             94                            mm*=j;
             95                            mm/=q;
             96                            q++;
             97                        }

             98                        res+=mm;
             99                    }
                
            100                }
                
            101            }

            102            else if(kk==ss)
            103            {
            104                res+=1;
            105            }

            106
            107            num0--;
            108            num1++;
            109        }

            110        else num0++;
            111        
            112        if(i==num-1&&num0>=num1)res++;
            113    }

            114    return res;
            115}

            116int main()
            117{
            118    int i,s,f;
            119    x[1]=0;
            120    for(i=2;i<=33;i++)x[i]=x[i-1]+num(i);
            121    while(scanf("%d%d",&s,&f)!=EOF)
            122    {
            123        int a=weishu(s),b=weishu(f),ans=0,c,d;
            124        c=jisuan(s);
            125        c+=x[a-1];
            126        d=jisuan(f);
            127        d+=x[b-1];
            128        ans=d-c;
            129        if(check(s))ans++;
            130        printf("%d\n",ans);
            131    }

            132    return 0;
            133}

            134

            posted on 2009-10-29 16:06 蝸牛也Coding 閱讀(340) 評論(0)  編輯 收藏 引用

            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            導航

            統計

            常用鏈接

            留言簿(8)

            隨筆檔案(78)

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久久精品午夜免费不卡| 成人亚洲欧美久久久久| 亚洲国产精品无码久久一线| 久久精品国产亚洲αv忘忧草| 热99RE久久精品这里都是精品免费| 久久精品人妻中文系列| 狠狠色丁香久久综合婷婷| 伊人久久五月天| 7777久久亚洲中文字幕| 97精品依人久久久大香线蕉97 | 日本精品久久久中文字幕| 日本精品久久久久影院日本| 久久棈精品久久久久久噜噜| 人妻无码精品久久亚瑟影视| 久久精品中文騷妇女内射| 亚洲а∨天堂久久精品9966| 伊人色综合久久天天| 国产激情久久久久久熟女老人 | 久久久精品人妻一区二区三区四| 久久本道综合久久伊人| 中文字幕亚洲综合久久| 国产V综合V亚洲欧美久久| 无码国内精品久久人妻| 亚洲精品第一综合99久久| 久久伊人影视| 亚洲AⅤ优女AV综合久久久| 精品一久久香蕉国产线看播放| 国产成人无码久久久精品一| 久久精品国产99久久久| 亚洲国产另类久久久精品| 日产精品99久久久久久| 日韩精品久久久肉伦网站| 99久久国产亚洲综合精品| 无码任你躁久久久久久老妇App| 思思久久好好热精品国产| 亚洲色欲久久久久综合网| 久久99热这里只频精品6| 久久久SS麻豆欧美国产日韩| 久久久久久人妻无码| 91久久精一区二区三区大全| 久久综合狠狠综合久久激情 |