题目要求:\((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;
}
标签:frac,奇数,cdot,题解,P11129,Inverted,偶数,2m
From: https://www.cnblogs.com/cly312/p/18442389