2025/12/12 牛客小白月赛125 G题题解

22 阅读1分钟

题目

G-琪露诺的连续取模求和_牛客小白月赛125

记 ,显然有 

考虑如何计算 

  • 可以证明:   -    - 
  •  从  到 ,有完整的  段  和剩下的一段 

单组测试时间复杂度 

AC代码如下

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
int l,r,p,q;
int pre(int n){
    return (n*(n+1))/2;//计算1+2+...+n
}
int f(int x){
    return x/q*pre(p-1)+pre(min(x%q,p-1));x/q个周期,每个周期和为pre(p-1),剩下部分和为0+1+...+min(x%q,p-1)。
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        
        cin>>l>>r>>p>>q;
        cout<<f(r)-f(l-1)<<endl;
    }
    return 0;
}

注:

剩下部分的和的计算:因为每段长度是q,且大于p-1的部分是0。