1905 Problem B 두 갈래 나무

1307 단어

문제 B:두 갈래 나무


시간 제한: 1Sec 메모리 제한: 32MB 커밋: 115 해결: 58

제목 설명


 
위에서 보듯이 정수 1, 2, 3.......로 특수한 두 갈래 나무를 이루었다.우리는 이미 이 두 갈래 나무의 마지막 결점이 n이라는 것을 안다.현재의 문제는 결점 m가 있는 자수에 모두 몇 개의 결점이 포함되어 있느냐는 것이다.예를 들어 n=12, m=3 그러면 위 그림의 결점 13, 14, 15 및 뒤의 결점은 모두 존재하지 않는다. 결점 m가 있는 자수에 포함된 결점은 3, 6, 7, 12이기 때문에 결점 m가 있는 자수에는 모두 4개의 결점이 있다.

입력


입력 데이터는 여러 줄을 포함하고 각 줄은 두 개의 정수 m, n(1<=m<=n<=100000000)을 포함하는 테스트 데이터를 제공한다.마지막 테스트 데이터에는 두 개의 0이 포함되어 있으며, 입력의 끝을 표시하며, 이 데이터는 처리할 필요가 없다.

출력


모든 테스트 데이터에 대해 한 줄을 출력하면 이 줄은 하나의 정수를 포함하고 결점 m가 있는 하위 트리에 포함된 결점의 수를 제시한다.

샘플 입력

3 7
142 6574
2 754
0 0

샘플 출력

3
63
498

경험 총결


이 문제는...완전 이차수잖아~ 두 결점의 층수를 산출한 다음 저층수 결점을 고층수의 맨 왼쪽에 있는 자손결점의 표호를 산출해 총결점과 비교하고 결과에 따라 상응하는 연산을 하면 결과를 얻을 수 있어~

정확한 코드

#include 
#include 
int index[31];
void compute()
{
	for(int i=0;i<31;++i)
	{
		index[i]=(int)pow(2.0,1.0*i);
	}
}
int deep(int number)
{
	int i;
	for(i=0;i<31;++i)
		if(number

좋은 웹페이지 즐겨찾기