【题解】CF1758D Range = √Sum
题面传送门
解决思路
通过手算较小的样例,可以得出一种直接的构造方法:
-
若 \(n\) 为奇数,则数列为 \(\frac {n-1} 2+2,\frac {n-1} 2+3,\dots ,n,n+3,n+4,\dots,n+\frac {n-1} 2+3\)。
-
若 \(n\) 为偶数,则数列为 \(\frac n 2,\frac n 2+1,\dots,n-1,n+1,n+2,\dots,n+\frac n 2\)。
证明
为了方便计算,先把原式左右两边都平方。
- \(n\) 为奇数的情况:
左式:
\[{\left(\left(n+\frac {n-1} 2+3\right)-\left(\frac {n-1} 2+2\right)\right)}^2=\left( n+1 \right)^2
\]
右式:
\[\sum_{i=\frac {n-1} 2+2}^{n}+\sum_{i=n+3}^{n+\frac {n-1} 2+3}=\frac{\left(\frac{3n+3}2\right)\left(\frac{n-3}2+1\right)}2+\frac{\left(\frac{5n+11}2\right)\left(\frac{n-1}2+1\right)}2\\=\frac{3n^2-3}8+\frac{5n^2+16n+11}8\\=n^2+2n+1\\=\left(n+1\right)^2
\]
- \(n\) 为偶数的情况:
左式:
\[\left(n+\frac n 2-\frac n 2\right)^2=n^2
\]
右式:
\[\sum_{i=\frac n 2}^{n-1}+\sum_{i=n+1}^{n+\frac n 2}=\frac{\left(\frac{3n-2}2\right)\times\frac n 2}2+\frac{\left(\frac{5n+2}2\right)\times\frac n 2}2\\=\frac{3n^2-2n}8+\frac{5n^2+2n}8\\=n^2
\]
所以两种情况下均满足题目要求,故构造方法合法。
AC Code
//If, one day, I finally manage to make my dreams a reality...
//I wonder, will you still be there by my side?
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0)
#define int long long
#define y1 cyy
#define fi first
#define se second
#define cnt1(x) __builtin_popcount(x)
#define mk make_pair
#define pb push_back
#define pii pair<int,int>
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define lbt(x) (x&(-x))
using namespace std;
int T,n;
void solve(){
cin>>n;
if(n&1){
for(int i=n/2+2;i<=n;i++) cout<<i<<' ';
for(int i=n+3;i<=n+n/2+3;i++) cout<<i<<' ';
cout<<endl;
}
else{
for(int i=n/2;i<n;i++) cout<<i<<' ';
for(int i=n+1;i<=n+n/2;i++) cout<<i<<' ';
cout<<endl;
}
}
signed main(){
IOS;TIE;
cin>>T;
while(T--) solve();
return 0;
}