日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj3252 组合数学

發布時間:2025/4/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj3252 组合数学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意:給兩個數字a,b求出[a,b]中轉化成二進制后0的個數大于等于1的個數的數

例如1100轉化成10-11,100-111,1000-1011,1100。保證每個區段都有1打頭,然后有一段數字任選用組合數求;

代碼如下

#include<iostream> #include<string.h> #include<stdio.h> using namespace std; int a[40]; int c[50][50]; void table() {int i,j;for(i=0;i<=32;i++){for(j=0;j<=i;j++){if(!j||i==j)c[i][j]=1;elsec[i][j]=c[i-1][j-1]+c[i-1][j];}}return; } int sum(int n){if(n == 0)return 0;int o = 0; //轉化成二進制的位數while(n){a[o++] = n%2;n/=2;}int sum = 0; //ansint u = 0; //二進制前面1的個數-0的個數for(int i = o-2; i >= 0; i--){if(a[i] == 1){if(i >= u){for(int k = 0; k <= i; k++){ //1的個數if(k + u <= i - k){//printf("%d %d %d\n", i, k, c[i][k]);sum += c[i][k];}}}u++;}else u--;}//printf("%d %d \n", u, o);u++;if(u <= 0){sum ++;}for(int i = 1; i < o-1; i++){for(int k = 0; k <= i; k++){if(1+k <= i-k){sum += c[i][k];}}}return sum; } int main(){int a, b;table();while(scanf("%d%d", &a, &b)!=EOF){printf("%d\n",sum(b) - sum(a-1));} } View Code

?

轉載于:https://www.cnblogs.com/icodefive/p/4234608.html

總結

以上是生活随笔為你收集整理的poj3252 组合数学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。