2 条题解

  • 0
    @ 2024-10-4 16:43:17

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

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

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

    al+ara_l+a_r 为偶数。

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

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

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

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

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

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

      • nn 为偶数时:答案为 n+(n2)+2=(n2+1)n2n+(n-2)+\dots 2 =(\frac{n}{2}+1)\cdot \frac{n}{2}
      • nn 为奇数时:答案为 $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;
    }
    
    

    信息

    ID
    65
    时间
    3000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    382
    已通过
    107
    上传者