题意:给定 组询问,每组询问给出两个正整数 ,求 是否是 的倍数。
首先是一个广为人知的结论:判断一个数 是否是 的倍数,只需要将它所有数位相加判断是否是 的倍数即可。
根据这个结论,本题转化为求 的和是否是 的倍数。
考虑 ,另外下面的分母不影响整个和是否是 的倍数。
因此分别判断 和 是否是 的倍数即可。
#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');
}
signed main(){
	int T = init();
	for (int i = 1; i <= T; ++i) {
		int L = init(), R = init();
		int s1 = L + R;
        int s2 = R - L + 1;
		if (s1 % 3 == 0 || s2 % 3 == 0)
			puts("YES");
		else
			puts("NO");
	}
}
后话:本来考虑的是利用逆元求解,但是后来由于一些原因得知了这个做法。还是不错的一道题。
upd:由于不熟悉评奖规则,在题解区发了第一篇题解之后没去那个讨论帖子下面抢,结果没了。另外那个快读被卡的就是我了。

京公网安备 11010502036488号