[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;
}
[2019.1.9]BZOJ2299 [HAOI2011]向量