本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
【Codeforces】Codeforces Round #836 (Div. 2) D. Range = √Sum | 构造
题目链接
题目
题目大意
对于给定的 构造一个所有元素互不相同的正整数数组 ,数组内元素均不超过 ,且满足以下条件:
注意这里的开根号不进行舍入。
思路
注意这里的开根号不进行舍入。
赛中特意发了通知强调这件事……
左半部分显然一定是整数,顺着这个思路我们试图把右边的东西构造成整数,也就是让 成为一个完全平方数。
因为有 个数让我们可以随便乱构造,很容易想到我们先确定一个平均数然后对称放置。当所有数的平均数是 时,
所以我们只需要让最小的数字是 ,最大的数字是 就可以了。中间的数字同样以 为轴对称输出,在 范围内即可。
本题解法很多,这里只给出我在赛中的思路。
代码
#include <iostream>
#include <algorithm>
#include <math.h>
#include <stdio.h>
using namespace std;
using LL=long long;
const int N=500001;
const LL mod=1000000007;
int n,m,k,x,y,z,tot,a[N],b[N];
LL solve()
{
scanf("%d",&n);
if (n%2) printf("%d ",4*n);
for (int i=1;i<=n/2-1;++i) printf("%d %d ",4*n+i,4*n-i);
printf("%d %d\n",4*n+n,4*n-n);
return 0;
}
int main()
{
int T=1;
scanf("%d",&T);
while (T--) solve();
return 0;
}
Other
这场 CF 堪称 constructforce……
第一次在 div2 能够 rank 两位数还是很开心的qwq
不过罚坐一个小时也没有做出 E 题,赛后发现 E 题跟我在高中校内出的一道题很像,唉……许愿今年可以上橙qwq