CF2144A.Cut the Array

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Cut the Array

题目描述

给定一个包含 nn 个非负整数的数组 [a1,a2,,an][a_1, a_2, \dots, a_n]

你需要将其切分为三个非空部分:前缀、中间部分和后缀。具体来说,你需要选择两个整数 llrr,满足 1l<r<n1 \le l < r < n,得到三部分:

  • 前缀部分包含第 11 个到第 ll 个元素(即 [a1,a2,,al][a_1, a_2, \dots, a_l]);
  • 中间部分包含第 l+1l+1 个到第 rr 个元素(即 [al+1,al+2,,ar][a_{l+1}, a_{l+2}, \dots, a_r]);
  • 后缀部分包含第 r+1r+1 个到第 nn 个元素(即 [ar+1,ar+2,,an][a_{r+1}, a_{r+2}, \dots, a_n])。

s1,s2,s3s_1, s_2, s_3 分别表示上述三部分元素和对 33 取模的余数,即:

  • s1=(i=1lai)mod3s_1 = (\sum\limits_{i=1}^{l} a_i) \bmod 3
  • s2=(i=l+1rai)mod3s_2 = (\sum\limits_{i=l+1}^{r} a_i) \bmod 3
  • s3=(i=r+1nai)mod3s_3 = (\sum\limits_{i=r+1}^{n} a_i) \bmod 3

你的任务是找到一组 llrr,使得 s1,s2,s3s_1, s_2, s_3 要么全都不同,要么全都相等。

输入格式

第一行为一个整数 tt1t10001 \le t \le 1000),表示测试用例的数量。

每个测试用例包含两行:

  • 第一行一个整数 nn3n403 \le n \le 40);
  • 第二行为 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n0ai400 \le a_i \le 40)。

输出格式

对于每个测试用例,如果存在一组合适的整数 llrr1l<r<n1 \leq l < r < n),输出这两个数(如果有多组解,输出任意一组即可)。如果不存在合适的切割方法,则输出两个 00

说明/提示

参考样例中的说明:

  • 在第一个样例中,数组被分为 [1,2,3][1, 2, 3][4,5][4, 5][6][6]s1=s2=s3=0s_1 = s_2 = s_3 = 0
  • 在第二个样例中,没有满足条件的切割方法;
  • 在第三个样例中,数组被分为 [2][2][1][1][0][0]s1=2s_1 = 2s2=1s_2 = 1s3=0s_3 = 0
  • 在第四个样例中,数组被分为 [7,2][7, 2][6,2][6, 2][4][4]s1=0s_1 = 0s2=2s_2 = 2s3=1s_3 = 1

由 ChatGPT 5 翻译

样例

4
6
1 2 3 4 5 6
4
1 3 3 7
3
2 1 0
5
7 2 6 2 4
3 5
0 0
1 2
2 4

在线编程 IDE

建议全屏模式获得最佳体验