题解 | #妹纸#

妹纸

https://ac.nowcoder.com/acm/problem/15675

和上一道题的思路类似,把相同的答案合并到一起计算。

官方题解也说了,需要巨大多分讨,将原序列分成若干个连续的求和段即可。

#include<cstdio>
#define int long long
int init(){
	char c = getchar();
	int x = 0, f = 1;
	for (; c < '0' || c > '9'; c = getchar())
		if (c == '-') f = -1;
	for (; c >= '0' && c <= '9'; c = getchar())
		x = (x << 1) + (x << 3) + (c ^ 48);
	return x * f;
}
void print(int x){
	if (x < 0) x = -x, putchar('-');
	if (x > 9) print(x / 10);
	putchar(x % 10 + '0');
}
int a, b, l, r;
int A(int x) { return x * (x + 1) >> 1; }
int mn(int x, int y) { return x < y ? x : y; }
int B(int x) { return A(l - 1) * (x / r) + A(mn(l - 1, x % r)); } // 整块求和,和散块求和,相加就是答案
signed main(){
	while (scanf("%lld%lld%lld%lld", &a, &b, &l, &r) != EOF) {
		--r;
		print(B(b) - B(a)), putchar('\n');
	}
}
全部评论

相关推荐

弦五Strings:他之所以会举报你代课是因为在这种人眼里正常上课就是正义代课就是邪恶,典型二极管思维,处理方法就是私下沟通,你就说你自己家里经济困难或者家里父母生病什么之类的,需要去打工挣钱,用尽孝的正义对冲他认为的上课的正义,他可能就妥协了。
我的实习日记
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务