CF1780B.GCD Partition
普及-
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
While at Kira's house, Josuke saw a piece of paper on the table with a task written on it.
The task sounded as follows. There is an array a of length n. On this array, do the following:
- select an integer k>1;
- split the array into k subsegments †;
- calculate the sum in each of k subsegments and write these sums to another array b (where the sum of the subsegment (l,r) is ∑j=lraj);
- the final score of such a split will be gcd(b1,b2,…,bk)‡.
The task is to find such a partition that the score is maximum possible. Josuke is interested in this task but is not strong in computer science. Help him to find the maximum possible score.
† A division of an array into k subsegments is k pairs of numbers (l1,r1),(l2,r2),…,(lk,rk) such that li≤ri and for every 1≤j≤k−1 lj+1=rj+1, also l1=1 and rk=n. These pairs represent the subsegments.
‡ gcd(b1,b2,…,bk) stands for the greatest common divisor (GCD) of the array b.
在吉良家时,仗助看到桌上有一张纸,上面写着一道题目。
题目内容如下:给定一个长度为 n 的数组 a。对这个数组执行以下操作:
- 选择一个整数 k>1;
- 将数组划分为 k 个子段†;
- 分别计算这 k 个子段的和,并将这些和写入另一个数组 b(其中子段 (l,r) 的和为 ∑j=lraj);
- 此划分的最终得分为 gcd(b1,b2,…,bk)‡。
任务是找到一种划分方式,使得得分尽可能大。仗助对这道题很感兴趣,但编程能力不强。请帮助他找出可能的最大得分。
† 数组划分为 k 个子段,是指 k 对数 (l1,r1),(l2,r2),…,(lk,rk),满足 li≤ri,且对每个 1≤j≤k−1 都有 lj+1=rj+1,同时 l1=1、rk=n。这些数对表示各子段。
‡ gcd(b1,b2,…,bk) 表示数组 b 的最大公约数(GCD)。
输入格式
The first line contains a single number t (1≤t≤104) — the number of test cases.
For each test case, the first line contains one integer n (2≤n≤2⋅105) — the length of the array a.
The second line contains n integers a1,a2,a3,…,an ($1 \le a_i \le 10^9 $) — the array a itself.
It is guaranteed that the sum of n over all test cases does not exceed 2⋅105.
第一行包含一个整数 t(1≤t≤104)—— 测试用例的数量。
对于每个测试用例,第一行包含一个整数 n(2≤n≤2⋅105)—— 数组 a 的长度。
第二行包含 n 个整数 a1,a2,a3,…,an(1≤ai≤109)—— 数组 a 本身。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
For each test case print a single integer — the maximum score for the optimal partition.
对于每个测试用例,输出一个整数——最优划分所能得到的最大得分。
输入输出样例
输入#1
6 4 2 2 1 3 2 1 2 3 1 4 5 6 1 2 1 1 1 3 10 12 30 37 88 12 78 89 17 2 12 6 7 7 7 7 7 7
输出#1
4 1 5 3 1 21
说明/提示
In the first test case, you can choose k=2 and split the array into subsegments (1,2) and (3,4).
Then the score of such a partition will be equal to gcd(a1+a2,a3+a4)=gcd(2+2,1+3)=gcd(4,4)=4.
In the fourth test case, you can choose k=3 and split the array into subsegments (1,2),(3,5),(6,6).
The split score is gcd(1+2,1+1+1,3)=3.
在第一个测试用例中,你可以选择 k=2,并将数组划分为子段 (1,2) 和 (3,4)。
此时该划分的得分为 gcd(a1+a2,a3+a4)=gcd(2+2,1+3)=gcd(4,4)=4。
在第四个测试用例中,你可以选择 k=3,并将数组划分为子段 (1,2),(3,5),(6,6)。
该划分的得分为 gcd(1+2,1+1+1,3)=3。
输入解题思路,AI测评打分。不知道怎么写?