loj#P3907. 「PA 2022」Wersja dla profesjonalistów

「PA 2022」Wersja dla profesjonalistów

题目描述

题目译自 PA 2022 Runda 2 Wersja dla profesjonalistów,感谢 @Qingyu 提供本题 checker。

在 POI Junior 2022 中有这样一道题:


Bytie 准备画一个如下图所示的三角形金字塔:

wdp1.png

Bytie 想要画的金字塔有 NN 层。最下层有 2N12N-1 个三角形,尖端向上和向下交替放置。在更高层的三角形也类似摆放,但是每层少两个三角形。因此,上图展示的是 N=3N=3 的情况。

Bytie 有一个程序可以让他在屏幕上绘制这样的图形。屏幕上某点处有一支笔,它能以不同的角度画出线段。Bytie 的程序接受的命令是字母 A..F\texttt{A..F}——每个字母意味着在一个方向上移动笔,并画出一条线段,如下图所示。

wdp2.png

例如,命令 FBBBFBFBFBFBBBFBFBFB\texttt{FBBBFBFBFBFBBBFBFBFB} 将绘制出如下图所示的线段:

wdp3.png

Bytie 的程序的最新版本可以接受更复杂的命令:除字母外,数字也可以接受。数字意味着重复某个特定的命令。更确切地说:

  • 命令 kZkZ,其中 k{1,2,3,4,5,6,7,8,9}k\in \{1,2,3,4,5,6,7,8,9\},同时 Z{A,B,C,D,E,F}Z\in \{\texttt{A,B,C,D,E,F}\}。这个命令和 ZZZZk\underbrace{ZZ\ldots ZZ}_k 效果相同(kk 个字母 ZZ)。
  • 命令 k[S]k\texttt{[}S\texttt{]},其中 k{1,2,3,4,5,6,7,8,9}k\in \{1,2,3,4,5,6,7,8,9\}SS 是某个命令序列。这个命令和 SSSSk\underbrace{SS\ldots SS}_k 效果相同(kk 个操作 SS),操作序列 SS 中也可以包含数字。

例如,3[2A]\texttt{3[2A]} 就是 AAAAAA\texttt{AAAAAA},绘制上图的操作序列也可以简化为 F3B3[FB]F3B3[FB]\texttt{F3B3[FB]F3B3[FB]}2[F3BFBFBFB]\texttt{2[F3BFBFBFB]} 甚至是 2[F3B3[FB]]\texttt{2[F3B3[FB]]}。注意操作命令中的 kk 不能大于 99,例如 10A\texttt{10A}58[AB]\texttt{58[AB]} 都是不允许的。

让我们回到第一张图片中的金字塔。Bytie 想用一个命令来实现这个金字塔。他有一个额外的条件:他希望笔永远不要在同一条线段上画两次(由于程序中的一个小错误,这样画线条就会稍微粗一些,这不符合 Bytie 的审美,会让他很不爽)。例如,命令 2[FBD]\texttt{2[FBD]} 就违反了这一规则——三角形的每条线段将被画两次。Bytie 的第二个要求是,该命令长度不应超过 150 000150\ 000 个字符。

Bytie 雇用你来构建一个合适的命令字符串。写一个程序,对于给定的 NN,输出一个字符串,生成一个 NN 层金字塔。我们假设开始时的笔在金字塔的左下角。正如在 IT 项目中有时会发生的那样,你可能违反了客户的要求。这意味着你的方案可能两次绘制同一条线段,或命令(稍微)超过 150 000150\ 000 的字符数限制,但这将使你付出代价——在这种情况下,你得到的分数会减少。确切的计分规则在「评分」一节中给出。


POI Junior,正如比赛名字所示,这是一个面向新手的比赛,这道题的作者即使对金字塔边长的限制极低也是可以原谅的。但是 PA 的参赛选手都是专家,我猜我们可以搭一个 101810^{18} 层的金字塔,并且操作序列长度可以不超过 150 000150\ 000,是吗?

本题的条件和限制和 POI Junior 的原题一致,除了如下的一些地方:

  • 并不强制起点必须为金字塔的左下角(可以从任何点开始)。
  • 如果你的输出字符数超过 150 000150\ 000,则你在该测试点上不会得分。
  • 如果你的输出重复绘制了某条线段,则你在该测试点上不会得分。

注:你可以在这里找到本题的参考题解。但是我们不保证题解包含的信息对本题有用。

输入格式

输入一行一个整数 n (1n1018)n\ (1\le n\le 10^{18}),表示金字塔的层数。

输出格式

输出长度不超过 150 000150\ 000 的操作序列,使其可以恰好建成一个 nn 层金字塔。

3

2[FB]2DE2AECEAE3[C]A

数据范围与提示

在「文件」中你可以找到 POI Junior 中提到的脚本文件 narysuj.py

注:调用之前请安装 turtle 包,可以使用 pip 工具安装。如果脚本在绘制图形后立即消失,可以将

turtle.done()

添加到 rysuj() 函数或脚本的末尾。