【CodeForces】792D Paths in a Complete Binary Tree

来源:互联网 发布:淘宝联盟提现手续费 编辑:程序博客网 时间:2024/05/17 08:19

考虑一下如何方便地表示树中的一个点,模拟即可

#include<stdio.h>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;ll n,k;int q,len,tp;char s[100005];pair<ll,ll> st[99];#define mp(a,b) make_pair(a,b)#define fi first#define se second#define poi(a) (a.fi+a.se>>1)int main(){    scanf("%lld%d",&n,&q);    while (q--)    {        scanf("%lld",&k);        scanf("%s",s);        len=strlen(s);         st[tp=1]=mp(1,n);        while(poi(st[tp])!=k)        {            if (k<poi(st[tp])) st[tp+1]=mp(st[tp].fi,poi(st[tp])-1),tp++;            if (poi(st[tp])<k) st[tp+1]=mp(poi(st[tp])+1,st[tp].se),tp++;        }        for (int i=0;i<len;i++)        {            if (s[i]=='U' && poi(st[tp])!=(1+n>>1)) tp--;            if (s[i]=='L' && st[tp].fi!=st[tp].se) st[tp+1]=mp(st[tp].fi,poi(st[tp])-1),tp++;            if (s[i]=='R' && st[tp].fi!=st[tp].se) st[tp+1]=mp(poi(st[tp])+1,st[tp].se),tp++;        }        printf("%lld\n",poi(st[tp]));    } }
0 0
原创粉丝点击