瓶子国的故事
题目背景
这是一道非传统题。
传说有一个国家叫瓶子国,里面有大大小小的瓶子。
现在瓶子国想要学习邻居跳蚤国发展计算机,可是瓶子国没有计算机只有瓶子。
于是瓶子国国王就给了你一些瓶子,让你实现一些计算任务。
题目描述
我们用水的量来描述一个数。
- 一个瓶子的容量为它最多可以装的水的数量。
瓶子国国王认为瓶子可以干这些事:
- $\verb!I!$:制造一个新瓶子,它的容量和里面装的水量都为输入的数,这个瓶子的编号为 $\textbf{当前最大编号} +1$。
- $\verb!F !s$;把编号为 $s$ 的瓶子里的水倒满。
- $\verb!E !s$:把编号为 $s$ 的瓶子里的水倒空。
- $\verb!C !s$:制作一个新瓶子,它的容量为 $s$,里面没装水,这个瓶子的编号为 $\textbf{当前最大编号} +1$。注意由于瓶子容积有限,$0\le s\le 10^9$。
- $\verb!M !s$:制作一个新瓶子,它的容量为 $\textbf{s 号瓶子里装的水的数量}$,里面没装水,这个瓶子的编号为 $\textbf{当前最大编号}+1$。
- $\verb!T !a\ b$:把 $a$ 瓶往 $b$ 瓶倒水,直到 $a$ 瓶空或者 $b$ 瓶满为止。(注意 $a\neq b$)。
- $\verb!O !s$:把 $s$ 号瓶子里的水输出。
还有一种昂贵的操作:
- $\verb!K !a\ b$:制作一个新瓶子,它的容量为 $\textbf{a 号瓶子的容量} \times \textbf{b 号瓶子的容量}$,这个瓶子的编号为 $\textbf{当前最大编号}+1$。注意由于瓶子容积有限,$\textbf{a 号瓶子的容量}\times\textbf{b 号瓶子的容量}$,不能超过 $10^9$。(使用这种操作要扣分,评分规则详见下方提示)
现在瓶子国国王把这些操作给了你,你只要输出这些操作,瓶子国的瓶子们就会为你执行!
瓶子国国王给了你一些计算任务,你只需要实现这些任务就行啦!
左边是数据点编号,右边是计算任务。
1. 输入 $a$ 和 $b$,计算 $a+b$。($0\le a,b\le 10^5$)
2. 输入 $a$ 和 $b$,计算 $|a-b|$。($0\le a,b\le 10^5$)
3. 输入 $a$ 和 $b$,计算 $\max(a,b)$。($0\le a,b\le 10^5$)
4. 输入 $a$ 和 $b$,输出 $\gcd(a,b)$。($1\le a,b\le 1000$)
5. 输入 $a$,输出 $a$ 的 $32$ 位二进制表示。($0\le a\le 10^5$,例如 $5$ 输出 $\verb!0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1!$)
6. 输入 $a$ 和 $b$,输出 $a\times b$。($0\le a,b\le 1000$)
7. 输入 $a$ 和 $b$,输出 $a\oplus b$。($0\le a,b\le 10^5$,$\oplus$ 表示异或)
8. 输入 $a$,输出 $a\div 10$ 下取整。($1\le a\le 10000$)
9. 输入 $a$ 和 $b$,输出 $a\times b \bmod 262144$。($0\le a,b\le 10^5$)
10. 输入 $a$ 和 $b$,输出 $a$ 的 $b$ 次方。($1\le a,b\le 1000$,$a$ 的 $b$ 次方不超过 $10^6$)
瓶子国国王会生成 $30$ 组**左右**的数据对你的程序进行测试,并根据你使用的操作个数进行评分,评分规则详见下方提示。
(**UPD**:如果你没有看懂题目这里有一段补充说明)
你**提交到洛谷的程序**(C/C++/Pascal)需要输出一段操作,格式类似样例输出。
例如第一个点,提交后洛谷上的 checker 会随机生成 $a$ 和 $b$ 作为 $\verb!I!$ **操作的输入**来测试你的操作。
对于本地 checker(下载见提示区),你可以把输出的操作保存成 `a.txt`,然后第一行输入 `a.txt`,第二行如果手玩就输 $0$,如果测试指定点就输编号。
输入输出格式
输入格式
输入共一行一个整数,表示数据点编号。
输出格式
输出可以满足计算任务的操作。
输入输出样例
输入样例 #1
233
// 仅作为参考,这里应该填数据编号
输出样例 #1
I
C 1
F 2
C 233333
T 1 3
T 2 3
O 3
(这个程序可以进行x+1!是不是很厉害啊!不过程序中并不能附加任何注释)
说明
请注意提交的是一段**输出操作的程序**!(如果你生成答案之后把生成它的程序删了直接打表输出,可能会输出超限)
灵感来自 NOI2016 旷野大计算(其实我不说你们肯定也知道啊)
为了方便选手本地测试,下面是一个 C++ 的本地checker(需要注意的是,它的测试结果与洛谷上的测试结果不一定一样,洛谷上可能更严格):
- http://paste.ubuntu.com/23070332/
如果需要下载 exe 的话可戳度盘:
- http://pan.baidu.com/s/1o7HZ1GY 密码为 `kqhl`。
### 评分规则
如果你的算法输出了错误结果(多输出也算)或者发生运行错误(操作不符合要求等)或者行数超过 $5\times 10^6$ 行或者行数太长了 checker 没能在 $1s$ 内测试完 $30$ 组数据,你将获得 $0$ 分。
否则,假设 std 的步数为 $s$,你的步数为 $x$。
- 如果 $x\le s$,你的基准分为 $10$ 分。
- 如果 $s<x\le s+5$,你的基准分为 $9$ 分。
- 如果 $s+5<x\le 3s$,你的基准分为 $8$ 分。
- 如果 $3s<x\le 10s$,你的基准分为 $7$ 分。
- 如果 $10s<x\le 50s$,你的基准分为 $6$ 分。
- 如果 $x>50s$,你的基准分为 $5$ 分。
如果你使用了昂贵的 $\verb!K!$ 操作,你会得到(基准分 $-4$)分。
否则你会得到基准分。
(说人话:步数越少分越高,用K操作扣4分)
(**UPD2:洛谷上的checker常见错误信息**)
```cpp
too many lines:超过500w行(这个似乎还没有触发过)
WTF:就是操作的第一个字符串(I/T/K/F/E/C/M/O)长度大于1
(可能是由于上一个操作多跟了一个操作数?)
wrong operation:操作的第一个字符串长度为1但不是I/T/K/F/E/C/M/O。
expected *****:希望输入一个数/字符串却没有(可能是操作数多打/少打)
nothing to input:I操作数量大于输入的数数量
F/E/C/M/T/O/K wrong bottle:操作的瓶子编号不在[1,当前最大编号]范围内
C exceed [0,10^9]:字面意思
K exceed 10^9:字面意思
wa on test xxx:你在第xxx组随机数据狗带了
wa on extratest xxx:你在第xxx组人工数据(手打的)狗带了
```