首页 > 其他分享 >ABC 243 D - Moves on Binary Tree(树+字符串)

ABC 243 D - Moves on Binary Tree(树+字符串)

时间:2022-09-24 17:13:19浏览次数:84  
标签:Binary ABC 孩子 LL Tree cin 字符串 优化 节点

https://atcoder.jp/contests/abc243/tasks/abc243_d

题目大意:

给定一颗完全二叉树,他总共可以有(2^10^100)-1个节点,节点下标为1,2,...,(2^10^100)-1。

给我们一个长度为n的字符串s,给定当前位于的节点位置

为我们经过这个字符串的操作后,我最后站在了哪个位置上?

字符串S包含三种字符:U退回当前子节点,L去当前左孩子处,R去当前右孩子处。

这道题目其实思维并不难,但是难点就是在于他的节点数量特别的大
考我们如何优化
你可以试一试常规的写法,能ac的点特别少,大多都wa了,hh(我一开始天真的以为就是这么简单)

  • 首先我们可以想,一个节点要走到左孩子,那只能2,要想走到右孩子,那只能2+1

  • 但是如果我们先去了左孩子,再返回根节点,其实没什么必要,可以在此优化步骤;

  • 然后如果我们先去了右孩子,再返回根节点,其实也是没必要,直接优化,而且更可能的是,精度丢失,影响操作

  • 直接把这两步从S中优化掉即可

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1000020;
const LL N=500200,M=2002;
#define l first
#define r second
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    //cin>>T;
    while(T--)
    {
        LL n,k;
        cin>>n>>k;
        string s;
        cin>>s;
        deque<char> st;
        for(LL i=0;i<s.size();i++)
        {
            if(st.empty()||st.back()=='U') st.push_back(s[i]);
            else if(s[i]=='U') st.pop_back();
            else st.push_back(s[i]);
        }
        for(LL i=0;i<st.size();i++)
        {
            if(st[i]=='U') k/=2;
            else if(st[i]=='L') k*=2;
            else if(st[i]=='R') k=k*2+1;
        }
        cout<<k<<endl;
    }
    return 0;
}

标签:Binary,ABC,孩子,LL,Tree,cin,字符串,优化,节点
From: https://www.cnblogs.com/Vivian-0918/p/16726009.html

相关文章

  • TrieTree(字典树)
    TrieTree(字典树)定义TrieTree,,字典树,又叫前缀树,单词查找树,是一种针对字符串前缀进行维护的数据结构,给定一个字符串集合构建的前缀树,可以在树中查找字符串或者字符串的......
  • ABCD*E=DCBA
    #include<stdio.h>#include<stdlib.h>intmain(void){inta,b,c,d,e;for(a=0;a<=9;a++){for(b=0;b<=9;b++){for(c=0;c<=9;c++)......
  • ABC 242 D - ABC Transform(dfs)
    https://atcoder.jp/contests/abc242/tasks/abc242_d题目大意:初始化给定一个字符串为S(S中只包含ABC三种字符)每次经过一次操作下:A就会变成BC,B变成CA,C变成AB。问我们......
  • Roadside Trees (Simplified Edition) CodeForces - 265B
    RoadsideTrees(SimplifiedEdition)CodeForces-265B松鼠Liss喜欢坚果。一条街上有n棵树(从西到东编号为1到n),每棵树的顶部都有一颗美味的坚果。树的高度我很高。......
  • leetcode 144. Binary Tree Preorder Traversal 二叉树展开为链表(中等)
    一、题目大意给你二叉树的根节点root,返回它节点值的前序遍历。示例1:输入:root=[1,null,2,3]输出:[1,2,3]示例2:输入:root=[]输出:[]示例3:输入:root=......
  • K-D Tree
    boolo;//当前维度structpoint{intp[2];friendbooloperator<(pointA,pointB){returnA.p[o]<B.p[o];}friendbooloperator!=(pointA,p......
  • ABC 269 (A-G)
    A给定\(a,b,c,d\),输出\((a+b)(c-d)\)和\(\texttt{Takahashi}\)。模拟即可。点击查看代码inta=read(),b=read(),c=read(),d=read();writeln((a+b)*......
  • 【解题报告】SP10628 COT-Count on a tree
    SP10628COT这道题的传送门双倍经验,两个题一样的啦简要题意给出一颗n个节点的树,每个节点都有一个权值,求u到v的第k小权值其实就是树上的区间第k小主席树+树上差分......
  • CF1540B Tree Array 题解
    CF1540BTreeArray给定一棵\(n\)个节点的树。对于这棵树,我们通过下列方法来生成一个序列:等概率选择这\(n\)个节点中的一个节点,并对这个节点打上标记(初始时没有节......
  • ABC 241E - Putting Candies(循环节:链+环)
    https://zhuanlan.zhihu.com/p/473078132这位大佬的E解释的非常清楚,强推E-PuttingCandieshttps://atcoder.jp/contests/abc241/tasks/abc241_e题目大意:给定一个......