P2838 瓶子国的故事

    • 7通过
    • 706提交
  • 题目提供者 fjzzq2002
  • 评测方式 云端评测
  • 标签 洛谷原创 Special Judge 提交答案
  • 难度 省选/NOI-
  • 时空限制 1000ms / 128MB

题解

  • 提示:收藏到任务计划后,可在首页查看。
  • 最新讨论 显示

    推荐的相关题目 显示

    题目背景

    这是一道非传统题。

    传说有一个国家叫瓶子国,里面有大大小小的瓶子。

    现在瓶子国想要学习邻居跳蚤国发展计算机,可是瓶子国没有计算机只有瓶子。

    于是瓶子国国王就给了你一些瓶子,让你实现一些计算任务。

    题目描述

    我们用水的量来描述一个数。

    一个瓶子的容量为它最多可以装的水的数量。

    瓶子国国王认为瓶子可以干这些事:

    I 制造一个新瓶子,它的容量和里面装的水量都为输入的数,这个瓶子的编号为当前最大编号+1。

    F s 把编号为s的瓶子里的水倒满。

    E s 把编号为s的瓶子里的水倒空。

    C s 制作一个新瓶子,它的容量为s,里面没装水,这个瓶子的编号为当前最大编号+1。注意由于瓶子容积有限,0<=s<=10^9。

    M s 制作一个新瓶子,它的容量为s号瓶子里装的水的数量,里面没装水,这个瓶子的编号为当前最大编号+1。

    T a b 把a瓶往b瓶倒水,直到a瓶空或者b瓶满为止。(注意a≠b)

    O s 把s号瓶子里的水输出。

    还有一种昂贵的操作:

    K a b 制作一个新瓶子,它的容量为a号瓶子的容量*b号瓶子的容量,这个瓶子的编号为当前最大编号+1。注意由于瓶子容积有限,a号瓶子的容量*b号瓶子的容量不能超过10^9。(使用这种操作要扣分,评分规则详见下方提示)

    现在瓶子国国王把这些操作给了你,你只要输出这些操作,瓶子国的瓶子们就会为你执行!

    瓶子国国王给了你一些计算任务,你只需要实现这些任务就行啦!

    左边是数据点编号,右边是计算任务。

    1. 输入a和b,计算a+b。(0<=a,b<=100000)

    2. 输入a和b,计算|a-b|。(0<=a,b<=100000)

    3. 输入a和b,计算max(a,b)。(0<=a,b<=100000)

    4. 输入a和b,输出gcd(a,b)。(1<=a,b<=1000)

    5. 输入a,输出a的32位二进制表示。(0<=a<=100000,例如5输出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*b。(0<=a,b<=1000)

    7. 输入a和b,输出a^b。(0<=a,b<=100000,^表示异或)

    8. 输入a,输出a/10下取整。(1<=a<=10000)

    9. 输入a和b,输出a*b mod 262144。(0<=a,b<=100000)

    10. 输入a和b,输出a的b次方。(1<=a,b<=1000,a的b次方<=1000000)

    瓶子国国王会生成30组左右的数据对你的程序进行测试,并根据你使用的操作个数进行评分,评分规则详见下方提示。

    UPD:如果你没有看懂题目这里有一段补充说明)

    提交到洛谷的程序(C/C++/Pascal)需要输出一段操作,格式类似样例输出。

    例如第一个点,提交后洛谷上的checker会随机生成a和b作为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

    评分规则:

    如果你的算法输出了错误结果(多输出也算)或者发生运行错误(操作不符合要求等)或者行数超过500w行或者行数太长了checker没能在1s内测试完30组数据,你将获得0分。

    否则,假设std的步数为s,你的步数为x。

    如果x<=s,你的基准分为10分。

    如果s<x<=s+5,你的基准分为9分。

    如果s+5<x<=3s,你的基准分为8分。

    如果3s<x<=10s,你的基准分为7分。

    如果10s<x<=50s,你的基准分为6分。

    如果x>50s,你的基准分为5分。

    如果你使用了昂贵的K操作,你会得到(基准分-4)分。

    否则你会得到基准分。

    (说人话:步数越少分越高,用K操作扣4分)

    UPD2:洛谷上的checker常见错误信息

    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组人工数据(手打的)狗带了
    提示
    标程仅供做题后或实在无思路时参考。
    请自觉、自律地使用该功能并请对自己的学习负责。
    如果发现恶意抄袭标程,将按照I类违反进行处理。