题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=620
给下落的深度和小球个数,小球依次下落,结点有个开关,每到一个结点,开关关向左,开向右
一开始想到了简单模拟,结果超时…
#include <cstdio>
#include <iostream>
#include <cstring>
#define maxn 20
using namespace std;
int s[1<<maxn];
int main(){
int n,D,I,now=1;
scanf("%d",&n);
while(n--){
scanf("%d%d",&D,&I);
int last=(1<<D)-1;//最后结点,临界
// cout<<"last="<<last<<endl;
memset(s,0,sizeof(s));
while(I--){
now=1;
while(1){
if(s[now]==0){
int temp= 2*now;
s[now]=1;
now=temp;
}
else{
int temp= 2*now+1;
s[now]=0;
now=temp;
}
if(now>last) bre