C. Alya and Permutation(python解)-codeforces
1.B. Alice's Adventures in Permuting (python解)-codeforces2.C. 小红打怪 (python解)-牛客3.B. Replacement (python解)-codeforces4.C - Sowing Stones(python解)-atcoder
5.C. Alya and Permutation(python解)-codeforces
6.AtCoder Beginner Contest 375 C题 (python解)7.C. Penchick and BBQ Buns (python解)-codeforces8.D - Strange Mirroring(python解)——Atcoder9.D. Sharky Surfing (python解)-codeforces10.牛客小白月赛105 (Python题解) A~EC. Alya and Permutation(python解)
原题链接:
问题分析:
给定一个整数 n,我们需要构造一个包含 1,2,…,n的排列 p,通过特定的运算使得一个初始值为 0 的变量 k 达到最大。
对于于每一个 i 从 1 到 n:
如果 i 是奇数,则执行:
k = k & p**i
如果 ii 是偶数,则执行:
k = k | p**i
我们的目标是找到一个排列 p,使得运算结束时 k 的值尽可能大
思路:
在这个问题中,我们可以通过合理设置最后 5 个元素来控制 k 的值。我们可以将问题分成两种情况处理:n 为奇数和偶数。
代码:
def main():
import sys
input = sys.stdin.read
data = input().split()
t = int(data[0])
index = 1
results = []
for _ in range(t):
n = int(data[index])
index += 1
s = set(range(1, n + 1))
a = [0] * (n + 1)
po2 = 1
while po2 * 2 <= n:
po2 *= 2
if n % 2 == 1:
results.append(n)
low = n & (-n)
a[n - 3] = low
a[n - 2] = low + (2 if low == 1 else 1)
a[n - 1] = n - low
a[n] = n
else:
results.append(po2 * 2 - 1)
if n == po2:
a[n - 4] = 1
a[n - 3] = 3
a[n - 2] = n - 2
a[n - 1] = n - 1
a[n] = n
else:
a[n - 2] = n
a[n - 1] = n - 1
a[n] = po2 - 1
for i in range(1, n + 1):
if a[i] in s:
s.remove(a[i])
for i in range(1, n + 1):
if a[i] == 0:
a[i] = s.pop()
results.append(' '.join(map(str, a[1:])))
print('\n'.join(map(str, results)))
main()
标签:
codeforces
, Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异