首页 > 其他 > 详细

Comet OJ - Contest #4--前缀和

时间:2019-05-25 16:58:55      阅读:134      评论:0      收藏:0      [点我收藏+]

 

原题:Comet OJ - Contest #4-B

https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门

技术分享图片

 

一开始就想着暴力打表,结果。。

前缀和是个很好的工具,本题可以用相邻前缀和之差得到结果。

例如:K=4:

1 1 1 1
0 1 1 1
1 0 1 1
1 1 0 1

 

 1 #include <cstdio>
 2 
 3 using int64 = long long;
 4 
 5 int main() {
 6   int T;
 7   scanf("%d", &T);
 8   for (int cas = 1; cas <= T; ++cas) {
 9     int64 l, r, k;
10     scanf("%lld%lld%lld", &l, &r, &k);
11     if (k & 1) printf("%lld\n", r - l + 1);
12     else {
13       auto sum = [] (int64 n, int64 k) {
14         if (n < k) return n + 1;
15         int64 l = n / k;
16         int64 zeros = l / (k + 1) * k;
17         if (l % (k + 1)) {
18           zeros += l % (k + 1) - 1;
19           zeros += n % k >= l % (k + 1) - 1;
20         }
21         return n + 1 - zeros;
22       };
23       printf("%lld\n", sum(r, k) - sum(l - 1, k));
24     }
25   }
26   return 0;
27 }

 

Comet OJ - Contest #4--前缀和

原文:https://www.cnblogs.com/lanclot-/p/10922836.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!