CF1389E Calendar Ambiguity

666,不会真的有人推式子的时候能抄错了吧。

根据题目给出的条件,轻松列出式子:

\(xd+y\equiv yd+x\mod w\),需满足 \(x<y,y<\min(d,m)\)。移项得 \((y-x)(d-1)\equiv 0\)

\(d-1\) 为常数,于是取 \(z=\gcd(d-1,w)\),将式子改写为 \((y-x)\frac{d-1}{z}\equiv0\mod \frac{w}{z}\),此时 \(\frac{d-1}{z},\frac{w}{z}\) 互质,直接扔掉。

最后的式子是 \((y-x)\equiv0\mod\frac{w}{z}\),枚举 \(f=y-x\),对于一个 \(f\),合法的 \(x,y\) 对数是 \(\min(m,d)-f+1\),同时要求 \(f\)\(\frac{w}{z}\) 的倍数,这个很显然是个等差数列求和,注意下边界就行了。

#include<iostream>
#include<numeric>
int main(){
    long long t, m, d, w, k, lm, rs;
    std::cin >> t; while(t--){
        std::cin >> m >> d >> w;
        lm = std::min(m, d);
        w /= std::gcd(w, d - 1);
        k = (lm - 1) / w;
        std::cout << k*lm-(1+k)*k/2*w << '\n';
    }
}
posted @ 2024-07-24 21:27  xlpg0713  阅读(2)  评论(0编辑  收藏  举报