uva679樹

題目大意
有一個深度爲d的樹 一個小球從根節點往下落 每個節點都有開關 而且一開始都是關閉狀態 當小球落到這個節點上 它的狀態纔會改變 然後當小球到達一個節點時,如果是關閉就往左走,如果是開的就往右走 問 給你一個數n 問你這第n個球會落在哪個節點上

解題思路
首先我們要知道
父親節點 是 n 的話,左子節點就是2n 右子節點是 2n+1;
本題中 根節點是1 那它左子節點就是 21=2 右子節點是21+1=3
我們一看就知道 第一個球一定是往左走的 第二個球一定是往右走的
一個節點的開關狀態也是與小球是第幾次經過那個節點有關 奇數次就往左走 偶數次就往右走 結合起來就是 這個小球的編號是奇數的話 那它就是往左走的第(m+1)/2個小球 如果是偶數 就是往右走的第(m/2)個小球 編號也隨之變化 一共有n層 遍歷下來就可

代碼如下

#include<iostream>
using namespace std;
int main()
{
	int t;
	int n,m,k,i;
	while(cin>>t)
	{
		if(t<0)
		  break;
		while(t--)
		{
			
			cin>>n>>m;
			k=1;
			for(i=1;i<n;i++)
			{
				if(m%2==0)
				{
					k=k*2+1;
					m=m/2;
				}
				else
				{
					k=k*2;
					m=(m+1)/2;
				}
			}
			cout<<k<<endl;
		} 
	}
	return 0;
}  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章