B. Alice's Adventures in Permuting (python解)-codeforces
B. Alice's Adventures in Permuting (python解)-codeforces
原题链接:
B. Alice's Adventures in Permuting
问题分析:
我们需要将数组 a 转换为一个排列,排列是由 n 个不同的整数构成,范围从 0 到 n−1。数组 a 是通过给定的参数 n、b 和 c 生成的。
\[a[i]=b⋅(i−1)+c
\]
\[对于 1≤i≤n
\]
思路:
-
当 b=0 时,数组中的所有元素都是 c,这意味着数组中的元素不可能是不同的,因此如果 c<n,则无法形成排列,返回
-1
;如果 c≥n,则数组中的元素超出了排列的范围,返回-1
。 -
处理 b>0 的情况:
\[最大值 =(n−1)⋅b+c。 \]检查这个最大值是否至少为 n−1。如果小于 n−1,则无法形成排列,返回
-1
-
计算所需的操作次数:
\[操作次数= ((n−1)−c ) / b +1 \]
代码:
import random
import sys
def main():
input = sys.stdin.read
data = input().split()
t = int(data[0])
index = 1
z = []
for _ in range(t):
n = int(data[index])
b = int(data[index + 1])
c = int(data[index + 2])
index += 3
if b == 0:
if c >= n:
z.append(str(n))
elif c >= n - 2:
z.append(str(n - 1))
else:
z.append("-1")
else:
if c >= n:
z.append(str(n))
else:
z.append(str(n - max(0, 1 + (n - c - 1) // b)))
print("\n".join(z))
if __name__ == "__main__":
main()
祝AC