CF2028B.Alice's Adventures in Permuting
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Alice 把 transmutation(转化)和 permutation(排列)这两个词搞混了!她有一个由三个整数 n、b、c 指定的数组 a:数组 a 的长度为 n,其中 ai=b⋅(i−1)+c,1≤i≤n。例如,如果 n=3,b=2,c=1,那么 a=[2⋅0+1,2⋅1+1,2⋅2+1]=[1,3,5]。
现在,Alice 非常喜欢 [0,…,n−1] 的排列 ∗,她想把 a 变成一个排列。每次操作中,Alice 会将 a 中的最大元素替换为 a 的 MEX †。如果 a 中有多个最大元素,Alice 会选择最左边的一个进行替换。
你能帮 Alice 计算她最少需要多少次操作才能第一次将 a 变成一个排列吗?如果永远无法变成排列,请输出 −1。
∗ 长度为 n 的排列是由 n 个互不相同的整数 0 到 n−1 组成的数组,顺序任意。请注意,这与通常的排列定义略有不同。例如,[1,2,0,4,3] 是一个排列,但 [0,1,1] 不是排列(1 在数组中出现了两次),[0,2,3] 也不是排列(n=3 但数组中有 3)。
† 一个数组的 MEX 是不在该数组中的最小非负整数。例如,[0,3,1,3] 的 MEX 是 2,[5] 的 MEX 是 0。
输入格式
每个测试点包含多组测试数据。第一行包含测试用例数 t(1≤t≤105)。
接下来每组测试数据一行,包含三个整数 n、b、c(1≤n≤1018,0≤b,c≤1018),表示数组的参数。
输出格式
对于每组测试数据,如果数组永远无法变成排列,输出 −1。否则,输出最少需要多少次操作才能第一次将数组变成排列。
输入输出样例
输入#1
7 10 1 0 1 2 3 100 2 1 3 0 1 3 0 0 1000000000000000000 0 0 1000000000000000000 1000000000000000000 1000000000000000000
输出#1
0 1 50 2 -1 -1 1000000000000000000
说明/提示
在第一个测试用例中,数组已经是 [0,1,…,9],所以不需要任何操作。
在第三个测试用例中,初始数组为 [1,3,5,…,199]。第一次操作后,199 被替换成 0。第二次操作,197 被替换成 2。如此继续下去,恰好需要 50 次操作才能得到 [0,1,2,3,…,99]。
在第四个测试用例中,需要两次操作:[1,1,1]→[0,1,1]→[0,2,1]。
在第五个测试用例中,过程为 [0,0,0]→[1,0,0]→[2,0,0]→[1,0,0]→[2,0,0]。这个过程会无限循环,因此数组永远无法变成排列,答案为 −1。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?