七海ノ心象素描

所有的为时已晚都是恰逢其时

Nanami^2 avatar

Author

Nanami^2

大一学生 | 不是很聪明的样子

Telegram

我的频道

不定期推送灵感笔记

t.me/kisanami_blog
联系方式
QQ 群
1072614878
发送邮件

CF1389E Calendar Ambiguity 题解

Solution

Nanami^2
Nanami^2 Even in the rain.
2022年07月31日
预计阅读 2 分钟
294 字

分析

即求

(x1)d+y(y1)d+x(modw)(x-1)d + y \equiv (y-1)d + x \pmod w

满足 x<yx < y 的解 (x,y)(x,y) 的个数。

化简

xd+yyd+x(modw)xd + y \equiv yd + x \pmod w ydxdxy0(modw)yd - xd - x -y \equiv 0 \pmod w (yx)(d1)0(modw)(y-x)(d-1) \equiv 0 \pmod w

w=wgcd(w,d1)w' = \frac{w}{\gcd(w,d-1)},那么有

yx0(modw)y-x \equiv 0 \pmod {w'}

考虑 yx=kwy-x = k w'。当 kk 为定值时,由于 yx[1,min(d,m)]y-x \in [1,\min(d,m)],所以数量为 min(d,m)kw\min(d,m) - kw'

答案即为

k=1min(d,m)wmin(d,m)kw\sum_{k=1}^{\lfloor \frac{\min(d,m)}{w'} \rfloor} \min(d,m) - kw'

发现这是个等差数列,直接求和即可。

首项 min(d,m)kw\min(d,m) - kw',末项 min(d,m)min(d,m)ww\min(d,m) - \lfloor \frac{\min(d,m)}{w'} \rfloor w',公差 min(d,m)w\lfloor \frac{\min(d,m)}{w'} \rfloor

答案

(2min(d,m)min(d,m)www)min(d,m)w2\frac{\big(2 \min(d,m) - \lfloor \frac{\min(d,m)}{w'} \rfloor w' - w'\big) \cdot \lfloor \frac{\min(d,m)}{w'} \rfloor }{2}

CODE

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5e5+5;
int t, m, d, w;
int read() {
int a=0, f=1; char c=getchar();
while(!isdigit(c)) {
if(c=='-') f=-1;
c=getchar();
}
while(isdigit(c)) a=a*10+c-'0', c=getchar();
return a;
}
int gcd(int x,int y) { return y? gcd(y,x%y):x; }
void solve() {
m=read(), d=read(), w=read();
int ans=0;
w/=(gcd(d-1,w));
int mn=min(m,d), cnt=mn/w;
ans=(2*(mn-w)-w*(cnt-1))*cnt/2;
printf("%lld\n",ans);
}
signed main() {
t=read();
while(t--) solve();
}

觉得这篇文章怎么样?

点个赞,让更多人看到!

分享这篇文章

知识因分享而增值

分类

题解

标签

数论

版权声明:本文作者为 Nanami^2,首发于nanami7.top

遵循 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

评论区

本评论区由 EveSunMaple 自主开发