【题解】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;
}
posted @ 2023-01-01 20:20  Binary_Lee  阅读(35)  评论(0)    收藏  举报
Title