poj3252
来源:互联网 发布:武装突袭3优化补丁 编辑:程序博客网 时间:2024/05/12 16:32
题目链接:http://poj.org/problem?id=3252
这道题本来一点也不难,思路一开始也是对的,但是就是细节啊,就是自己写代码的能力太差了啊!竟然一而再再二三的wa,然后让我改了一个晚上加上午,看来以后还是要多练习啊!
#include<iostream>#include<string>#include<cstdio>__int64 b[40][40]; void fun(){int i,j;//b[i][j]表示i位数中j个0 for(i=1; i<40; i++)b[0][i]=0;for(i=0; i<40; i++)b[i][0]=1;for(i=1; i<40; i++)for(j=1; j<=i; j++)if(i==j)b[i][j]=1;elseb[i][j]=b[i-1][j]+b[i-1][j-1];}int main(){__int64 n,m,i,j,k;__int64 a[41];fun();a[1]=0;a[0]=0;j=1;for(i=2; i<=40; i++){j*=2;if(i%2==0)//0占一半a[i]=j/2;else a[i]=(j-b[i-1][(i-1)/2])/2; } while(scanf("%I64d%I64d",&n,&m)!=EOF) { int s[40];i=0;int t=0;//n不用带自己内身的while(n!=0)//i为n转换为二进制后的长度的{ s[++i]=n%2;n=n/2;} for(j=1; j<=i-1; j++)//先是位数较小的n+=a[j];int l=1,o=0;//分别记录1和0的个数for(j=i-1; j>=1; j--)//还有i-2个需要操作的if(s[j]==1){o++; for(k=0; k<=j-1; k++){if(o+k>=l+(j-1-k))//o的个数比l的个数多{ n+=b[j-1][k]; }}o--;l++;} elseo++;////////////////////////////////////i=0;while(m!=0)//i为n转换为二进制后的长度的{ s[++i]=m%2;if(s[i]==0)t++;m=m/2;} if((i%2==0 && t>=i/2) || (i%2!=0 && t>i/2))//代表本身的m++;for(j=1; j<=i-1; j++)//先是位数较小的m+=a[j];l=1;o=0;for(j=i-1; j>=1; j--)//还有i-2个需要操作的if(s[j]==1){o++; for(k=0; k<=j-1; k++){if(o+k>=l+(j-1-k))//o的个数比l的个数多 m+=b[j-1][k];}o--;l++;} elseo++;printf("%I64d\n",m-n);}return 0;}
- poj3252
- POJ3252
- poj3252
- poj3252
- poj3252
- POJ3252
- poj3252
- poj3252
- poj3252
- POJ3252
- POJ3252 Round Numbers
- POJ3252 Round Numbers
- poj3252 Round Numbers
- POJ3252 RoundNumbers 【组合数学】
- poj3252 组合数学
- poj3252 round number
- poj3252 Round Numbers
- poj3252(组合数学)
- 题目17:找x
- 跳跃(处理操作迭代-等价替代)
- 题目16:Repeater
- Google Map Api 谷歌地图接口整理
- 题目18:查找学生信息
- poj3252
- 题目20:查找
- 自己编写的去掉字符串中的所有空格函数trim_all
- 题目19:打印极值点下标
- 有关python的运行时参数PYTHONUNBUFFERED的用法
- printf函数中的自增和自减
- 两种常用的排序算法
- hawei 9306 snmp 详细oid
- BCB编写dll 转载