1. 程式人生 > >[2019.1.9]BZOJ2299 [HAOI2011]向量

[2019.1.9]BZOJ2299 [HAOI2011]向量

成了 要求 討論 printf 奇數 c++ its 得到 相同

其實可操作相當於只有\((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]向量