题解:P11129 【MX-X5-T1】「GFOI Round 1」Inverted World

题目要求:\((a_l + \cdots + a_r) \div (r - l + 1)\) 是整数。

\(\frac{(a_l + a_r)\cdot(r-l+1)\div 2}{r-l+1}\) 为整数。

\(\frac{(a_l + a_r)}{2}\) 为整数。

\(a_l+a_r\) 为偶数。

\(m+(l-1)\cdot d + m+(r-1)\cdot d\) 为偶数。

\(2m+(l+r-2)\cdot d\) 为偶数。

\(2m+(l+r)\cdot d -2d\) 为偶数。

因为 \(2m,-2d\) 为偶数,所以也就是 \((l+r)\cdot d\) 为偶数。

  • \(d\) 为偶数时:所有的区间都可以,答案为 \(\frac{n\cdot (n+1)}{2}\)

  • \(d\) 为奇数时:要求 \(l+r\) 为偶数,即 \(2\cdot l+r-l\) 为偶数,即 \(r-l\) 为偶数,也就是这个区间的长度为奇数。

    • \(n\) 为偶数时:答案为 \(n+(n-2)+\dots 2 =(\frac{n}{2}+1)\cdot \frac{n}{2}\)
    • \(n\) 为奇数时:答案为 \(n+(n-2)+\dots 1 =\frac{(n+1)\cdot (\frac{n}{2}+1)}{2}\)

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve(){
	int n,k,d;
	cin>>n>>k>>d;
	if(d&1){
		if(n%2==0) 
			cout<<(n/2+1)*(n/2)<<'\n';
		else cout<<(n+1)*(n/2+1)/2<<'\n';
	}else{
		cout<<(n)*(n+1)/2<<endl;
	}
}
signed main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

posted @ 2024-09-30 20:17  cly312  阅读(12)  评论(0)    收藏  举报