• <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 閱讀(334) 評論(0)  編輯 收藏 引用

            <2009年7月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導航

            統計

            常用鏈接

            留言簿(8)

            隨筆檔案(78)

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            狠狠精品干练久久久无码中文字幕| 久久中文字幕精品| 狠狠色婷婷久久一区二区三区| 人妻少妇久久中文字幕| 久久综合久久综合九色| 久久国产三级无码一区二区| 久久国产欧美日韩精品| 久久噜噜电影你懂的| 欧美日韩中文字幕久久久不卡| 久久w5ww成w人免费| 日本加勒比久久精品| a级成人毛片久久| yy6080久久| 久久99国产一区二区三区| 久久国产亚洲高清观看| 中文字幕精品无码久久久久久3D日动漫 | 一本色道久久99一综合| 国产午夜精品久久久久九九电影| 亚洲中文字幕无码久久综合网| 精品水蜜桃久久久久久久| 国产亚洲精久久久久久无码| 亚洲精品99久久久久中文字幕| 久久国产精品99精品国产987| 久久综合国产乱子伦精品免费| 伊色综合久久之综合久久| 久久久婷婷五月亚洲97号色| 伊人精品久久久久7777| 久久久久久亚洲精品影院| 欧美久久精品一级c片片| 91精品国产高清久久久久久io | 色8激情欧美成人久久综合电| 久久精品国产亚洲AV电影| 亚洲精品无码久久久久去q | 成人资源影音先锋久久资源网| 国产aⅴ激情无码久久| 影音先锋女人AV鲁色资源网久久 | 久久久久亚洲AV无码专区桃色 | 国产精品国色综合久久| 久久免费的精品国产V∧| 精品久久久久久成人AV| aaa级精品久久久国产片|