Codeforces-Round-#812C题解

Codeforces Round #812 C. Build Permutation

题目大意

一个满足如下规则的从零开始标号数列a可以称之为好:

$\forall i \in [0,n), a_i + i = y^2, y\in\mathbb{Z}$

给定数字nn, 求出排列[0,1,2n1][0,1,2 \dots n-1]的排列pp,使得pp为一个好的数列

有T组数据

数据规模

1T1041\leq T\leq 10^4

1n1051\leq n \leq 10^5

Σn105\Sigma n \leq 10^5

我的思路(无)

大佬代码

jiangly

对于n1n-1,查找大于等于n1n-1的最小的完全平方数vv,并将其与vn+1v-n+1相匹配,即:

1
2
3
4
for (int i = v - r + 1; i < r; i++)
{
p[i] = v - i;
}

接着将n迭代为vn+1v-n+1,重复操作,直到n=0

时间复杂度:Θ(n)\Theta(n)