题目大意

题意

分析

根据题意易列出同余式

(y1)d+x(x1)d+y(mod w)(y-1)*d+x \equiv (x-1)*d+y \quad (mod \ w)

化简得

x(d1)y(d1)(mod w)x*(d-1) \equiv y*(d-1) \quad (mod \ w)

k=gcd( (d1) , w )k = gcd( \ (d-1) \ , \ w \ )

xy(mod w/k)x \equiv y \quad (mod \ w/k)

这样分模数讨论即可且根据题意可知 x<y<=min(m,d)x < y <= min(m,d)

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void solve(){
int m,d,w;
cin>>m>>d>>w;
int k = min(m,d);
int res = 0;
if((d-1) % w == 0){
res = k*(k-1)/2;
}
else{
int g = __gcd(w,d-1);
w = w / g;
int d = k / w;
int dx = k - (k/w*w);
res = d*(d+1)/2*dx + (d-1)*d/2*(w-dx);
}
cout << res << endl;
}