CF2148E.Split

普及-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

农夫 John 有一个包含 nn 个正整数的数组 aa 和一个整数 kk。

记 a[l,r]a[l, r] 表示数组 aa 的一个子数组∗^{\text{∗}}。他执行如下过程来独立判断子数组 a[l,r]a[l, r] 是否为“awesome”:

  • FJ 最初有 kk 个空的多重集,编号从 11 到 kk。
  • 对于 aa 中的每一个元素 aia_i(1≤i≤n1 \leq i \leq n):
    • 如果 l≤i≤rl \leq i \leq r(也就是 aia_i 属于子数组 a[l,r]a[l, r]),他将 aia_i 放入多重集 11;
    • 否则,他可以随意将 aia_i 放入任意一个多重集(可以是多重集 11)。
  • 如果存在一种分配方式,使得对于每个取值 vv,所有多重集中值为 vv 的元素个数都相同,也就是说,使得所有多重集中包含完全相同的元素(忽略元素顺序),则称子数组 a[l,r]a[l, r] 为“awesome”。

请输出所有“awesome”子数组的数量。

∗^{\text{∗}} 对于大小为 nn 的数组 aa,以及整数 1≤l≤r≤n1 \leq l \leq r \leq n,子数组 a[l,r]a[l, r] 是由 al,…,ara_l,\ldots,a_r 按顺序组成的数组。

输入格式

第一行包含一个整数 tt(1≤t≤10001 \leq t \leq 1000)—— 测试用例的数量。

每个测试用例的第一行包含两个整数 nn 和 kk(2≤k≤n≤2⋅1052 \leq k \leq n \leq 2 \cdot 10^5)。

接下来一行包含 nn 个用空格分隔的整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤n1 \leq a_i \leq n)。

保证所有测试用例中 nn 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例,输出一个整数,表示“awesome”子数组的数量。

输入输出样例

  • 输入#1

    4
    3 2
    1 1 1
    4 2
    1 2 1 2
    8 2
    3 3 3 3 2 2 2 2
    6 3
    1 1 1 1 1 1

    输出#1

    0
    7
    18
    11

说明/提示

测试用例 1:n=3n=3,a=[1,1,1]a=[1,1,1]。

对于 k=2k=2,无法让两个多重集中 11 的数量相等,因此没有“awesome”子数组。

测试用例 2:n=4n=4,a=[1,2,1,2]a=[1,2,1,2]。

对于 k=2k=2,最终状态下每个多重集都应包含恰好一个 11 和一个 22。因此,一个有效的子数组最多只能包含一个 11 和最多一个 22。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页