题解:CF2071B Perfecto
Magallan_forever · · 题解
简要说明题意:
现在存在一个长度为
给出
题目分析:
脑子不好不会构造,提供一个邪道做法:
注意到 Python 代码跑一下
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)
结果如下:
既然只有这么一点,那完全可以对这一点数特判:
对于
然后就行了:
#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;
}