美文网首页
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