美文网首页
Codeforces 1343B - Balanced Arra

Codeforces 1343B - Balanced Arra

作者: 费城的二鹏 | 来源:发表于2020-05-01 15:02 被阅读0次

    这些单薄的树,就长在高速路两边,另一边就是田地,它们就在人类活动痕迹的夹缝中生存。如果挡了路会被伐,挡了光也会被伐,所以他们只能单薄,还得生对地方。

    题目: Codeforces 1343B - Balanced Array
    https://codeforces.com/problemset/problem/1343/B

    翻译

    给一个数字 n,保证数字 n 是偶数。

    需要构造一个长度为 n 的数列 a,并有如下要求:

    • 前 n/2 个元素要求是偶数
    • 后 n/2 个 元素要求是奇数
    • a 内的所有元素要求不同并且是正数
    • 前半部分元素的和等于后半部分的元素的和

    如果有很多答案,可以随便输出任意答案,不保证可以构建出答案。

    输出格式

    • 如果不能构建答案输出单行的 NO
    • 如果能构建答案输出单行 YES 并且在下一行输出答案

    分析

    因为元素都是奇数或者偶数,所以只能是整数,此时需要分成两种情况讨论。

    • 如果 n/2 为奇数,那么奇数个奇数相加是奇数,偶数个奇数相加是偶数,所以前后不能相等,所以这种情况直接输出 NO
    • 如果 n/2 为偶数,则必定可以构建成功,前半部分构建成 2, 4, 6, ···, n。后半部分大概是 1, 3, 5, ···, n - 3, n - 1 + n / 2

    可以看到构建的最后一个数字与其它不一样,因为后半部分会比前半部分每个数字少1,一共少 n / 2,所以最后一个数字要在基础上加 n/2,并且 n/2 是偶数所以加上之后依旧是奇数,构造的数列符合所有要求。

    总结来说,这是道很简单的题目,大概就是找规律吧,当初ACM称作水题。

    代码(Python3)

    # https://codeforces.com/problemset/problem/1343/B
    
    import sys
    
    # sys.stdin = open(r"./file/input.txt", 'r')
    # sys.stdout = open(r"./file/output.txt", 'w')
    
    t = int(input())
    
    for i in range(t):
        n = int(input())
        count = int(n / 2)
        if count % 2 == 1:
            print("NO")
        else:
            print("YES")
            for j in range(1, count + 1):
                if j != 1:
                    print(" ", end="")
                print(j * 2, end="")
    
            for j in range(1, count + 1):
                print(" ", end="")
                if j == count:
                    print(j * 2 + count - 1)
                else:
                    print(j * 2 - 1, end="")
    

    by 费城的二鹏 2020.05.01

    相关文章

      网友评论

          本文标题:Codeforces 1343B - Balanced Arra

          本文链接:https://www.haomeiwen.com/subject/jpfqghtx.html