UOJ Logo Universal Online Judge

UOJ

#303. 【APIO2017】斑斓之地

附件下载 统计

在很久以前的黄金时代,澳大利亚的土地是矩形的,它可以被划分成 RC 列的网格状, 行的编号从北到南依次为 1R,列的编号从西到东依次为 1C(r,c) 表示第 r 行第 c 列的土地。一天,伟大的彩虹蛇从 (sr,sc) 出发在澳大利亚的土地上移动,彩虹蛇连续进行了 M 次移动,每次它会向正北 (N)、正南(S)、正东(E)或正西(W)方向移动一格,其经过的所 有的格子(包括起点和终点)都会变成河流。 数百万年之后,你想购买一块矩形区域纪念伟大的彩虹蛇。你想给所购买矩形区域内每一块不是河流的格子都染上颜色,要求相邻的格子颜色必须相同,两个格子相邻当且仅当两个格子有一条公共边,你所购买区域之外的格子无须染色。 现在给出彩虹蛇 M 次移动的方向,你有 Q 个购买矩形区域的方案,问每个方案最多能够将土地染上多少种不同的颜色。

实现细节

你需要包含头文件 rainbow.h。

你需要实现函数 init 和 colours:

  • init(R, C, sr, sc, M, S) --- 该函数会在开始时调用并且只会调用一次

    • R 和 C: 表示网格的行数和列数
    • sr 和 sc: 彩虹蛇的起点坐标
    • M: 彩虹蛇移动的步数
    • S: 一个长度为 M 的字符串, S[i] 是N、S、E、W之一, 分别表示彩虹蛇的第 i 次移动是向正北、正南、正东、正西移动一格,0iM1 。保证彩虹蛇不会移动到网格外面。
  • colours(ar, ac, br, bc) --- 在调用init一次之后, 该函数会被总共调用 Q

    • (ar,ac) 表示你所购买矩形的西北角的格子的坐标,(br,bc) 表示你所购买矩形的东南角的格子的坐标,返回一个整数表示在这种购买方案下最多能够将土地染上多少种不同的颜色
    • 1arbrR, 1acbcC

请参考提供的模板文件以获取更多的细节。

样例测试程序

样例测试程序按照以下格式输入:

  • 第1行:四个整数 R, C, MQ;
  • 第2行:两个整数 srsc;
  • 第3行:一个包含 M 个字符的字符串 S, 每个字符是N、S、E、W之一 (如果 M=0 则此行应留空);
  • 第4行到 Q+3 行:每行四个整数ar, ac, brbc

样例和解释

函数调用 返回值 解释
init(6, 4, 3, 3, 9, "NWESSWEWS")提供了网格的大小,彩虹蛇的起点和它的移动路径。
colours(2, 3, 2, 3)0只有 (2,3) 被矩形包含,但 (2,3) 是河,所以没有格子需要染色,颜色数为 0
colours(3, 2, 4, 4)2河将矩形区域分成了两部分:一部分包含 (3,2),另一部分包含 (3,4)(4,4) ;因此最多染 2 种不同的颜色。
colours(5, 3, 6, 4)1矩形区域内不包含河,所有格点都是联通的,所以你最多染 1 种 颜色。
colours(1, 2, 5, 3)3河将矩形区域分成了三部分:第一部分包含 (1,2)(1,3) ,第二 部分包含 (3,2),第三部分包含 (5,3),因此最多可以染3种不同的颜色。

例子

注:上图中的蓝色格子表示河流

样例输入

6 4 9 4 
3 3 
NWESSWEWS 
2 3 2 3 
3 2 4 4 
5 3 6 4 
1 2 5 3

样例输出

0
2
1
3

子任务

对于全部任务, 0M100000, R,C,Q1

子任务分数RCQ
111 R50 C50 Q1000
212 R=2 C200000 Q100000
324 R=200000 C200000 Q=1
427 R=1000 C1000 Q=100000
526 R=200000 C200000 Q=100000

在本题的 hack 中,你可以提交与样例交互库相同格式的输入,该输入需要满足 1R,C200000,1Q100000,0M100000

时间限制2s

空间限制512MB

下载

样例及测评库下载