[2019.1.9]BZOJ2299 [HAOI2011]向量

其实可操作相当于只有\((a,b),(a,-b),(b,a),(b,-a)\),因为加上\((-a,-b)\)相当于减去\((a,b)\),其他的同理。

那么问题就变成了找到整数\(c,d,e,f\),使

\(c(a,b)+d(a,-b)+e(b,a)+f(b,-a)=(x,y)\)成立。

化简原方程,得

\((c+d)a+(e+f)b=x\)

\((e-f)a+(c-d)b=y\)

根据裴蜀定理,方程\(ax+by=c\)整数解,当且仅当

\(gcd(x,y)|c\)成立。

我们设\(P(x,y,c)\)为真表示上式成立,为假表示不成立。

那么这题就是\(P(a,b,x)\ and\ P(a,b,y)\)为真,原方就程就有解吗?

并不是。因为这样只能保证\(c+d,e+f,c-d,e-f\)是整数,而\(c=\frac{(c+d)+(c-d)}{2},d=\frac{(c+d)-(c-d)}{2},e=\frac{(e+f)+(e-f)}{2},f=\frac{(e+f)-(e-f)}{2}\)就不一定是整数了。

所以我们不仅要求\(P(a,b,x)\ and\ P(a,b,y)\)为真,还要求\(c+d,c-d\)奇偶性相同,\(e+f,e-f\)奇偶性相同。

我们\(hs(x,y,c,f)\)表示方程组

\(ax+by=c\)

\(dx+ey=f\)

是否存在\(a,e\)奇偶性相同,\(b,d\)奇偶性相同的解,为真表示存在,为假表示不存在。

那么我们分类讨论。

1.当\(a\equiv e\equiv b\equiv d\equiv0(mod\ 2)\)时,我们发现\(\frac{a}{2},\frac{b}{2},\frac{d}{2},\frac{e}{2}\)的取值范围为整数。

那么我们得到

\(\frac{a}{2}x+\frac{b}{2}y=\frac{c}{2}\)

\(\frac{d}{2}x+\frac{e}{2}y=\frac{f}{2}\)

有解。

根据裴蜀定理,\(P(x,y,\frac{c}{2})\ and\ P(x,y,\frac{f}{2})\)为真。

\(P(2x,2y,c)\ and\ P(2x,2y,f)\)为真。

换句话说,当\(a,b,d,e\)为偶数,\(P(2x,2y,c)\ and\ P(2x,2y,f)\)为真则存在解。

2.当\(a,e\)\(b,d\)中有某一组或者两组都是奇数,以\(a,e\)是奇数为例:

\(ax+by=c\)

\(dx+ey=f\)

\((a+1)x+by=c+x\)

\(dx+(e+1)y=f+y\)

这样一来就回到了偶数的情况,即\(P(2x,2y,c+x)\ and\ P(2x,2y,f+y)\)为真。

综上所述,当

\(P(2x,2y,c)\ and\ P(2x,2y,f)\)

\(P(2x,2y,c+x)\ and\ P(2x,2y,f+y)\)

\(P(2x,2y,c+y)\ and\ P(2x,2y,f+x)\)

\(P(2x,2y,c+x+y)\ and\ P(2x,2y,f+x+y)\)

中有任意一个为真时,\(hs(x,y,c,f)\)为真。

code:

#include<bits/stdc++.h>
using namespace std;
long long gcd(long long x,long long y){
	return y?gcd(y,x%y):x;
}
bool P(long long x,long long y,long long c){
	return !(c%gcd(x,y));
}
int T;
long long a,b,x,y;
int main(){
	scanf("%d",&T);
	while(T--)scanf("%lld%lld%lld%lld",&a,&b,&x,&y),printf("%c\n",((P(2*a,2*b,x)&&P(2*a,2*b,y))||(P(2*a,2*b,x+a)&&P(2*a,2*b,y+b))||(P(2*a,2*b,x+b)&&P(2*a,2*b,y+a))||(P(2*a,2*b,x+a+b)&&P(2*a,2*b,y+a+b)))?'Y':'N');
	return 0;
}
posted @ 2019-03-17 18:01  xryjr233  阅读(96)  评论(0编辑  收藏  举报