PS:做这道题的时候开始公式推错了,就一直wrong,哎,还是太菜了。 题解:
#include <cstdio>
using int64
= long long;
int main() {
int T
;
scanf("%d", &T
);
for (int cas
= 1; cas
<= T
; ++cas
) {
int64 l
, r
, k
;
scanf("%lld%lld%lld", &l
, &r
, &k
);
if (k
& 1) printf("%lld\n", r
- l
+ 1);
else {
auto sum
= [] (int64 n
, int64 k
) {
if (n
< k
) return n
+ 1;
int64 l
= n
/ k
;
int64 zeros
= l
/ (k
+ 1) * k
;
if (l
% (k
+ 1)) {
zeros
+= l
% (k
+ 1) - 1;
zeros
+= n
% k
>= l
% (k
+ 1) - 1;
}
return n
+ 1 - zeros
;
};
printf("%lld\n", sum(r
, k
) - sum(l
- 1, k
));
}
}
return 0;
}
转载请注明原文地址: https://yun.8miu.com/read-133403.html