题目描述
这是一道交互题。
若智是一名炼金术士。
一场大梦过后,他终于发现了单向传送门的打造方法。
若智打造了
刚开始,
如果一扇传送门的等级为
所以,所有传送门的等级是小于
若智可以运用自己的能力,改变传送门的等级。
但是,打破平衡是炼金术士的大忌,所以如果若智想要把一个传送门的等级增加
反过来,如果若智想要把一个传送门的等级降低
当然,为了让所有传送门的等级都是小于
比如说,有
今天是若智的生日,他想对于每个
任务介绍
你需要实现一个函数 adjust
,来帮助若智调整传送门的等级。
adjust(N,a,b)
N
为传送门的数量,a,b
为题目中描述的两个数组。
在每个测试点中,交互库都会调用 adjust
函数。
你可以调用函数Inc
和 Dec
来进行修改。
Inc(x)
- 把
号传送门的等级提高 。当然,你需要按照上面的规则先穿过门转身给面前的门降 级。
- 把
Dec(x)
- 把
号传送门的等级降低 。当然,你需要按照上面的规则先穿过门转身给面前的门升 级。
- 把
再次注意这里所有的增减操作均在模
注意函数 Inc
和 Dec
不会改变函数 adjust
中形参 a
的内容。
实现细节
本题只支持C++。
源代码中需要包含头文件 portals.h
。
你需要实现下面的函数:
int adjust(int N,int* a,int* b)
对于数组 a
和 b
,你只能访问下标在
如果无论如何也不能实现若智的目标,则该函数需要返回
函数 Inc
的接口如下:
void Inc(int x)
函数 Dec
的接口如下:
void Dec(int x)
如何测试你的程序
你需要在本题目录下使用如下命令编译得到可执行程序:
g++ -o guess grader.cpp guess.cpp
可执行文件将从标准输入读取以下格式的数据:
第一行包含一个正整数
第二行一共
第三行一共
读入完成之后,交互库将会调用 adjust
函数。
接下来交互库将会在标准输出中输出以下信息:
第一行一共
第二行形如 cnt tot
,其中
第三行是 adjust
函数的返回值。
样例源代码
在本题目录下,有C++语言的样例源代码 portals.cpp
。按照上文中提到的方式进行编译,即能通过编译得到可执行程序。
样例源代码只是帮助理解题目,结果不一定正确。
样例一
input
3
1 2 1
1 0 0
output
1 0 0
3 3
0
explanation
该样例即题目中描述的例子。
这是使用试题目录的grader和样例源程序得到的输出文件。
评分方式
对于每个测试点,首先交互库会比较 adjust
函数的返回值与正确的返回值。如果正确的返回值是
如果 adjust
的返回值是
如果 adjust
的返回值是
如果 adjust
的返回值是
每个子任务中
一个子任务的得分等于该子任务中所有测试点得分的最小值乘以该子任务的满分分值。
限制与约定
保证一个子任务中的测试点不超过
子任务 1(20分):
子任务 2(20分):
子任务 3(20分):
子任务 4(40分):
时间限制:
空间限制:
题目中所给的时间、空间限制为你的代码和交互库加起来可以使用的时间和空间。
我们保证,在1s内至少能进行 Inc
函数或 Dec
函数的调用,其余部分交互库运行所用的时间不超过 0.1s,也就是说,选手实际可用的时间至少为0.9s 。
我们保证,对于任何合法的数据及在限制范围内的调用,任何版本的交互库(包括下发给选手的和最终评测使用的)运行所用的空间不会超过12MB,也就是说,选手实际可用的空间至少为500MB。