专栏文章

题解:CF1389E Calendar Ambiguity

CF1389E题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioxzuz7
此快照首次捕获于
2025/12/03 02:59
3 个月前
此快照最后确认于
2025/12/03 02:59
3 个月前
查看原文

CF1389E

入手

因为星期几有周期性,可以转化为同余问题。 (x1)d+(y1)(y1)d+(x1)(modw)(x-1)d+(y-1) \equiv (y-1)d+(x-1) \pmod{w} 移项并因式分解得:
(xy)(d1)0(modw)(x-y)(d-1)\equiv 0 \pmod{w}
我们将 xyx-y 改为 yxy-x,因为题目中 y>xy>x
(yx)(d1)0(modw)(y-x)(d-1)\equiv 0 \pmod{w}
也就是:
w(yx)(d1)w \mid (y-x)(d-1) 现在请读者将 (yx)(y-x) 当作未知数来求解这个方程,求出未知数的范围,然后你或许就能解出这道题了。

解法

两边同除 gcd(w,d1)\gcd(w,d-1)wgcd(w,d1)(yx)(d1)gcd(w,d1)\frac{w}{\gcd(w,d-1)} \mid \frac{(y-x)(d-1)}{\gcd(w,d-1)}
因为 wgcd(w,d1)d1gcd(w,d1)\frac{w}{\gcd(w,d-1)}\perp \frac{d-1}{\gcd(w,d-1)}
所以只能是:
wgcd(w,d1)(yx)\frac{w}{\gcd(w,d-1)} \mid (y-x) 我们换个元,令 D=wgcd(w,d1)D=\frac{w}{\gcd(w,d-1)}
此时,我们可以将问题简化了:
存在多少个数对 (x,y)(x,y),满足:
1 \leq x < y \leq \min(m, d), \\ D \mid (y - x). \end{cases}$$ 这个问题已经非常简单了,我们已经将一道蓝题转化为橙题了! 但你如果还需要做法: 令 $L=[1,\min(m, d)]$。 1. $y-x\leq 0$ 时,不满足 $x<y$ 2. $y-x=D$ 的贡献为 $L-D$。 3. $y-x=2D$ 的贡献为 $L-2D$。 4. $y-x=kD$ 的贡献为 $L-kD$。 计算最大可能的 $k$,并将前 $k$ 项贡献使用等差数列求和来算总贡献。 ## 代码 ```cpp #include<bits/stdc++.h> using namespace std; typedef long long ll; ll m,d,w; ll gcd(ll a,ll b){return (!b?a:gcd(b,a%b));} ll solve(){ scanf("%lld%lld%lld",&m,&d,&w); ll L=min(m,d);// 指 x,y 介于 [1,L] ll D=w/gcd(d-1,w);// D | y-x; ll cnt=L/D;// 即上文中最大的 k ll ans=cnt*L-D*(cnt+1)*cnt/2; return ans; } signed main(){ int T;scanf("%d",&T); while(T--)printf("%lld\n",solve()); } ```

评论

0 条评论,欢迎与作者交流。

正在加载评论...