A15004 | Preorder
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
You are given a rooted tree of $2^n - 1$ vertices. Every vertex of this tree has either $0$ children, or $2$ children. All leaves of this tree have the same distance from the root, and for every non-leaf vertex, one of its children is the left one, and the other child is the right one. Formally, you are given a perfect binary tree.
The vertices of the tree are numbered in the following order:
- the root has index $1$ ;
- if a vertex has index $x$ , then its left child has index $2x$ , and its right child has index $2x+1$ .
Every vertex of the tree has a letter written on it, either A or B. Let's define the character on the vertex $x$ as $s_x$ .
Let the preorder string of some vertex $x$ be defined in the following way:
- if the vertex $x$ is a leaf, then the preorder string of $x$ be consisting of only one character $s_x$ ;
- otherwise, the preorder string of $x$ is $s_x + f(l_x) + f(r_x)$ , where $+$ operator defines concatenation of strings, $f(l_x)$ is the preorder string of the left child of $x$ , and $f(r_x)$ is the preorder string of the right child of $x$ .
The preorder string of the tree is the preorder string of its root.
Now, for the problem itself...
You have to calculate the number of different strings that can be obtained as the preorder string of the given tree, if you are allowed to perform the following operation any number of times before constructing the preorder string of the tree:
- choose any non-leaf vertex $x$ , and swap its children (so, the left child becomes the right one, and vice versa).
The vertices of the tree are numbered in the following order:
- the root has index $1$ ;
- if a vertex has index $x$ , then its left child has index $2x$ , and its right child has index $2x+1$ .
Every vertex of the tree has a letter written on it, either A or B. Let's define the character on the vertex $x$ as $s_x$ .
Let the preorder string of some vertex $x$ be defined in the following way:
- if the vertex $x$ is a leaf, then the preorder string of $x$ be consisting of only one character $s_x$ ;
- otherwise, the preorder string of $x$ is $s_x + f(l_x) + f(r_x)$ , where $+$ operator defines concatenation of strings, $f(l_x)$ is the preorder string of the left child of $x$ , and $f(r_x)$ is the preorder string of the right child of $x$ .
The preorder string of the tree is the preorder string of its root.
Now, for the problem itself...
You have to calculate the number of different strings that can be obtained as the preorder string of the given tree, if you are allowed to perform the following operation any number of times before constructing the preorder string of the tree:
- choose any non-leaf vertex $x$ , and swap its children (so, the left child becomes the right one, and vice versa).
输入格式
The first line contains one integer $n$ ( $2 \le n \le 18$ ).
The second line contains a sequence of $2^n-1$ characters $s_1, s_2, \dots, s_{2^n-1}$ . Each character is either A or B. The characters are not separated by spaces or anything else.
The second line contains a sequence of $2^n-1$ characters $s_1, s_2, \dots, s_{2^n-1}$ . Each character is either A or B. The characters are not separated by spaces or anything else.
输出格式
Print one integer — the number of different strings that can be obtained as the preorder string of the given tree, if you can apply any number of operations described in the statement. Since it can be very large, print it modulo $998244353$ .
输入输出样例
输入 #1
4 BAAAAAAAABBABAB
输出 #1
16
输入 #2
2 BAA
输出 #2
1
输入 #3
2 ABA
输出 #3
2
输入 #4
2 AAB
输出 #4
2
输入 #5
2 AAA
输出 #5
1
暂无题解
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?
提交通过
评测结果:Accepted