专栏文章
题解:CF2071B Perfecto
CF2071B题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miq2gwyq
- 此快照首次捕获于
- 2025/12/03 21:52 3 个月前
- 此快照最后确认于
- 2025/12/03 21:52 3 个月前
简要说明题意:
现在存在一个长度为 的全排列 ,如果 满足 不是完全平方数对 成立,那么 是一个完美的全排列。
给出 ,构造符合定义的全排列。
题目分析:
脑子不好不会构造,提供一个邪道做法:
注意到 好像经常不是完全平方数,那我们通过这段
PYPython 代码跑一下 看看结果:import numpy
for i in range(1,500001):
if numpy.sqrt(i*(i+1)/2)==numpy.floor(numpy.sqrt(i*(i+1)/2)):
print(i)
结果如下:

既然只有这么一点,那完全可以对这一点数特判:
对于 等于这些数的情况,答案就是 ,否则对于 ,如果 等于这些数就先填 再填 ,否则就直接填 。
然后就行了:
CPP#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
if(n==1||n==8||n==49||n==288||n==1681||n==9800||n==57121||n==332928) printf("-1\n");
else{
for(int i=1;i<=n;++i)
if(i==1||i==8||i==49||i==288||i==1681||i==9800||i==57121||i==332928) printf("%d %d ",i+1,i),++i;
else printf("%d ",i);
putchar('\n');
}
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...