题意:给定 组询问,每组询问给出两个正整数 ,求 是否是 的倍数。
首先是一个广为人知的结论:判断一个数 是否是 的倍数,只需要将它所有数位相加判断是否是 的倍数即可。
根据这个结论,本题转化为求 的和是否是 的倍数。
考虑 ,另外下面的分母不影响整个和是否是 的倍数。
因此分别判断 和 是否是 的倍数即可。
#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:由于不熟悉评奖规则,在题解区发了第一篇题解之后没去那个讨论帖子下面抢,结果没了。另外那个快读被卡的就是我了。