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 是通过给定的参数 nbc 生成的。

\[a[i]=b⋅(i−1)+c \]

\[对于 1≤i≤n \]

思路:

  • 当 b=0 时,数组中的所有元素都是 c,这意味着数组中的元素不可能是不同的,因此如果 c<n,则无法形成排列,返回 -1;如果 cn,则数组中的元素超出了排列的范围,返回 -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

posted @ 2024-11-14 09:34  MPyGF  阅读(33)  评论(0编辑  收藏  举报