标签:des io os ar for sp 2014 art on
Round NumbersUSACO 2006 November Silver
/******************************
author : Grant Yuan
time : 2014/10/16 17:37
algorithm: 组合计数
source : POJ 3252
explain : 按照G++交的,C++会跪
*******************************/
#include <iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
int a[35],len;
int sum[40][40];
void slove(int num)
{
a[0]=0;len=0;
while(num){
a[++len]=num&1;
num=num>>1;
}
}
void Cal_sum()
{
memset(sum,0,sizeof(sum));
for(int i=0;i<=32;i++)
for(int j=0;j<=i;j++)
{
if(j==0||i==j) sum[i][j]=1;
else sum[i][j]=sum[i-1][j]+sum[i-1][j-1];
}
}
int Get_sum1()
{
int l=len,res=0;
for(int i=1;i<len-1;i++)
{
for(int j=i/2+1;j<=i;j++)
{
res+=sum[i][j];
}
}
return res;
}
int Get_sum2()
{
int res=0,zero=0;
for(int i=len-1;i>=1;i--)
{
if(a[i]){
for(int j=(len+1)/2-zero-1;j<i;j++)
res+=sum[i-1][j];
}
else zero++;
}
return res;
}
int main()
{
int ans1,ans2,s,f;
Cal_sum();
while(~scanf("%d%d",&s,&f)){
ans1=0;ans2=0;
slove(s);
ans1+=Get_sum1();ans1+=Get_sum2();
slove(f+1);
ans2+=Get_sum1();ans2+=Get_sum2();
printf("%d %d\n",ans1,ans2);
printf("%d\n",ans2-ans1);
}
return 0;
}
标签:des io os ar for sp 2014 art on
原文地址:http://blog.csdn.net/yuanchang_best/article/details/40151989