原题
又拖黑了
https://codeforces.com/problemset/problem/1260/B
题目大意
给出一对a,b,在多次 a : = a − x , b : = b − 2 x 或 者 a : = a − 2 x , b : = b − x ( x ∈ N ∗ ) a:=a−x , b:=b−2x 或者 a:=a−2x, b:=b−x(x∈N^*) a:=a−x,b:=b−2x或者a:=a−2x,b:=b−x(x∈N∗)后,能否使a和b同时为0
题目分析
熟悉的赋值符号……这道题我记得好像做过,也没有用二分,推导过程如下:
设
x
,
y
x,y
x,y为每次变化后的数值,
i
i
i为每次变化的值
那么有
a
−
i
=
x
,
b
−
2
i
=
y
a-i=x,b-2i=y
a−i=x,b−2i=y或者
a
−
2
i
=
x
,
b
−
i
=
y
a-2i=x,b-i=y
a−2i=x,b−i=y无论是哪一个相加后得到
(
a
+
b
)
−
3
i
=
x
+
y
(a+b)-3i=x+y
(a+b)−3i=x+y即
(
a
+
b
)
%
3
=
x
+
y
(a+b)\%3=x+y
(a+b)%3=x+y此处
x
+
y
=
0
x+y=0
x+y=0所以
(
a
+
b
)
%
3
=
0
(a+b)\%3=0
(a+b)%3=0有两种情况不成立
当
a
−
i
=
0
,
b
−
2
i
>
0
或
a
−
2
i
>
0
,
b
−
i
=
0
a-i=0,b-2i>0或a-2i>0,b-i=0
a−i=0,b−2i>0或a−2i>0,b−i=0时
即
a
>
2
b
,
b
>
2
a
a>2b,b>2a
a>2b,b>2a时不成立
代码
#include<cstdio>
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
int a,b;
scanf("%d%d",&a,&b);
if ((a + b) % 3 == 0 && (a <= 2 * b && b <= 2 * a)) printf("YES\n");else printf("NO\n");
}
return 0;
}
这应该是专题1的最后一题了,明天开始奋战专题2