这是一道交互题。
很遗憾这题并不支持C++以外的语言
小Q无聊的时候喜欢玩一个叫“大家来找茬”的游戏。
这个游戏的规则是这样的:在每一局游戏中,系统向玩家展示一组(两张)图,这两张图之间只有几处不同,玩家需要在规定时间内找出尽可能多的不同点。若玩家在时间用尽前找出了所有不同点,则称该局“挑战成功”,否则时间用尽时游戏结束,该局“挑战失败”。
最近,这个游戏推出了新模式——生存模式。在生存模式中,系统将准备
开启了一个新的模式,第一件事情自然是:刷分。作为一个计算机工程汪,小Q自然不会单纯到徒手刷分啦。利用技术手段对游戏程序进行分析后,小Q发现,该游戏在为玩家生成图片时使用了如下策略:首先准备两张大图,并记录下它们之间所有
具体来说,这两张大图被分别分成了
神通广大的小Q没多久就搞到了所有
交互格式
你需要实现 spots.cpp
。在该文件的开头,你应当使用 #include "spots.h"
来包含头文件 spots.h
;接下来,你需要实现 spots_init
和 spots
两个函数。详细说明如下:
void spots_init(std::vector< std::pair<int, int> > points);
当小Q想要开始一局游戏之前,小Q会调用该函数。其参数 points
是一个 vector
,存放有所有不同点的坐标。你应当在该函数内初始化你需要的数据。
void spots(int x1, int y1, int x2, int y2);
当系统给小Q一组新的图片
bool report(int x);
其中参数 x
表示你找到的不同点的编号。一个点的编号等于它在传入的 vector
中的下标。若该函数返回 true
则表示该不同点正确,否则表示该不同点有误。当你已经处理完该组图片时,应主动让 spots
函数返回。
需要特别说明的是,你不允许从标准输入或任何文件中读取任何信息,也不允许向标准输出或任何文件中输出任何信息。
选手目录下的 spots_sample.cpp
提供了 spots.cpp
的一个示例。
限制与约定
本题共有10个测试点,每个测试点的规模如下:
编号 | 点数和 | |||
---|---|---|---|---|
1 | 5000 | 5000 | ||
2 | 20000 | 20000 | ||
3 | 50000 | 50000 | ||
4 | 100000 | 100000 | ||
5 | 500000 | 2000000 | - | |
6 | 500000 | 2000000 | - | |
7 | 500000 | 2000000 | - | |
8 | 500000 | 2000000 | - | |
9 | 500000 | 2000000 | - | |
10 | 500000 | 2000000 | - |
其中点数和一列表示所有询问区域中点数的总和。
对于每个测试点,我们将按如下方式进行评分:
首先,我们将调用你的 spots_init
函数。你将有 spots_init
函数在
之后,你有 spots
函数,直到时间用尽。如果在某次 report
时我们发现时间已经用尽,我们将直接计算分数并结束程序。请注意在该过程中对 report
函数的调用也会计入用时,但你可以认为 report
函数足够快,在
请保证你的 spots
函数的每次调用能在
如果你的程序在任何时间点使用了超过
如果你的程序没有发生上述任意一种得
除上述限制外,本题还有总时间和空间限制(因为种种原因我们调小了时限,但是并不影响大家解题):
时间限制:
空间限制:
但该时间限制仅为保证程序能够结束而设置,选手无需关心。
样例评分程序
在选手目录下提供了样例评分程序 grader.cpp
。
该程序从标准输入中读取点和询问的信息,并与你的程序进行交互。读入信息的具体格式见下文。当程序运行结束时,将把结果打印在标准输出。
要使用该样例评分程序,你需要将它与你的 spots.cpp
一起编译。参考命令行如下:
g++ grader.cpp spots.cpp -o spots.exe -O2 -std=c++11
需要指出的是,样例评分程序并没有提供测试时间的功能。
样例评分程序的评测方式
第一行包含两个整数
接下来的
接下来的
例如:
5 3 1 1 2 2 3 3 4 4 5 5 0 0 1 3 2 2 3 3 10 10 11 12
最终评测方式
最终的测评库非常神秘,不会下发。比赛中途进行提交是使用最终的测评库测试样例,即第一组数据。