[HAOI2011]向量(裴蜀定理)

  • 注释:本章同余针对 2 2 2
  • 题面
  • 题意:见题面。
  • 解决思路:考虑前四个向量 ( a , b ) , ( a , − b ) , ( − a , b ) , ( − a , − b ) \small (a,b), (a,-b), (-a,b), (-a,-b) (a,b),(a,b),(a,b),(a,b),设共取出 n \small n n个向量, a , − a , b , − b \small a,-a,b,-b a,a,b,b的个数分别为 x a 1 , x a 2 , y b 1 , y b 2 x_{a1},x_{a2},y_{b1},y_{b2} xa1,xa2,yb1,yb2
    ∴ {   x a 1 + x a 2 = n   y b 1 + y b 2 = n \small \therefore \begin{cases} \ x_{a1}+x_{a2}=n\\ \ y_{b1}+y_{b2}=n\\ \end{cases} { xa1+xa2=n yb1+yb2=n
    n \small n n个向量之和为 ( a x a 1 − a x a 2 , b y b 1 − b y b 2 ) \small (ax_{a1}-ax_{a2},by_{b1}-by_{b2}) (axa1axa2,byb1byb2)
    x 1 = x a 1 − x a 2 \small x_1=x_{a1}-x_{a2} x1=xa1xa2 y 1 = y b 1 − y b 2 \small y_1=y_{b1}-y_{b2} y1=yb1yb2,结论: x 1 ≡ y 1 \small x_1\equiv y_1 x1y1
    证明
    n ≡ p \small n\equiv p np p \small p p的取值为 0 \small 0 0 1 \small 1 1
    ∴ {   x a 1 + x a 2 ≡ p   y b 1 + y b 2 ≡ p \small \therefore \begin{cases} \ x_{a1}+x_{a2}\equiv p\\ \ y_{b1}+y_{b2}\equiv p\\ \end{cases} { xa1+xa2p yb1+yb2p
    ∴ {   x a 1 + x a 2 − 2 x a 2 ≡ p   y b 1 + y b 2 − 2 y b 2 ≡ p \small \therefore \begin{cases} \ x_{a1}+x_{a2}-2x_{a2}\equiv p\\ \ y_{b1}+y_{b2}-2y_{b2}\equiv p\\ \end{cases} { xa1+xa22xa2p yb1+yb22yb2p
    ∴ {   x a 1 − x a 2 ≡ p   y b 1 − y b 2 ≡ p \small \therefore \begin{cases} \ x_{a1}-x_{a2}\equiv p\\ \ y_{b1}-y_{b2}\equiv p\\ \end{cases} { xa1xa2p yb1yb2p
    ∴ x 1 ≡ y 1 ≡ p \small \therefore x_1\equiv y_1\equiv p x1y1p
    证毕
    结论: n \small n n个向量之和为 ( a x 1 , b y 1 ) \small (ax_1,by_1) (ax1,by1) x 1 ≡ y 1 \small x_1\equiv y_1 x1y1
    同理考虑后四个向量 ( b , a ) , ( b , − a ) , ( − b , a ) , ( − b , − a ) \small (b,a), (b,-a), (-b,a), (-b,-a) (b,a),(b,a),(b,a),(b,a),设共取出 m \small m m个向量,设 m \small m m个向量之和为 ( b y 2 , a x 2 ) \small (by_2,ax_2) (by2,ax2),且 y 2 ≡ x 2 \small y_2\equiv x_2 y2x2
    八个向量之和为 ( a x 1 + b y 2 , b y 1 + a x 2 ) \small (ax_1+by_2,by_1+ax_2) (ax1+by2,by1+ax2) x 1 ≡ y 1 \small x_1\equiv y_1 x1y1 y 2 ≡ x 2 \small y_2\equiv x_2 y2x2
    ∴ {   a x 1 + b y 2 = x        x 1 ≡ y 1   b y 1 + a x 2 = y        y 2 ≡ x 2 \small \therefore \begin{cases} \ ax_1+by_2=x~~~~~~\small x_1\equiv y_1\\ \ by_1+ax_2=y~~~~~~\small y_2\equiv x_2\\ \end{cases} { ax1+by2=x      x1y1 by1+ax2=y      y2x2
    ∴ {   a x 1 + b y 2 = x        x 1 ≡ y 1   a x 2 + b y 1 = y        y 2 ≡ x 2 \small \therefore \begin{cases} \ ax_1+by_2=x~~~~~~\small x_1\equiv y_1\\ \ ax_2+by_1=y~~~~~~\small y_2\equiv x_2\\ \end{cases} { ax1+by2=x      x1y1 ax2+by1=y      y2x2
    情况一 x 1 ≡ y 1 ≡ 0 \small x_1\equiv y_1\equiv 0 x1y10 y 2 ≡ x 2 ≡ 0 \small y_2\equiv x_2\equiv 0 y2x20
    ∴ {   a x 1 + b y 2 = x   a x 2 + b y 1 = y \small \therefore \begin{cases} \ ax_1+by_2=x\\ \ ax_2+by_1=y\\ \end{cases} { ax1+by2=x ax2+by1=y
    将同余 0 \small 0 0的项提出 2 \small 2 2
    ∴ {   2 a x 1 ′ + 2 b y 2 ′ = x   2 a x 2 ′ + 2 b y 1 ′ = y \small \therefore \begin{cases} \ 2ax_1'+2by_2'=x\\ \ 2ax_2'+2by_1'=y\\ \end{cases} { 2ax1+2by2=x 2ax2+2by1=y
    有解的条件是 ( 2 a , 2 b ) ∣ x \small (2a,2b)\mid x (2a,2b)x ( 2 a , 2 b ) ∣ y \small (2a,2b)\mid y (2a,2b)y
    情况二 x 1 ≡ y 1 ≡ 0 \small x_1\equiv y_1\equiv 0 x1y10 y 2 ≡ x 2 ≡ 1 \small y_2\equiv x_2\equiv 1 y2x21
    ∴ {   a x 1 + b y 2 = x   a x 2 + b y 1 = y \small \therefore \begin{cases} \ ax_1+by_2=x\\ \ ax_2+by_1=y\\ \end{cases} { ax1+by2=x ax2+by1=y
    将同余 0 \small 0 0的项提出 2 \small 2 2
    ∴ {   2 a x 1 ′ + b y 2 = x   a x 2 + 2 b y 1 ′ = y \small \therefore \begin{cases} \ 2ax_1'+by_2=x\\ \ ax_2+2by_1'=y\\ \end{cases} { 2ax1+by2=x ax2+2by1=y
    ∴ {   2 a x 1 ′ + b ( y 2 + 1 ) = x + b   a ( x 2 + 1 ) + 2 b y 1 ′ = y + a \small \therefore \begin{cases} \ 2ax_1'+b(y_2+1)=x+b\\ \ a(x_2+1)+2by_1'=y+a\\ \end{cases} { 2ax1+b(y2+1)=x+b a(x2+1)+2by1=y+a
    ∴ {   2 a x 1 ′ + 2 b y 2 ′ = x + b   2 a x 2 ′ + 2 b y 1 ′ = y + a \small \therefore \begin{cases} \ 2ax_1'+2by_2'=x+b\\ \ 2ax_2'+2by_1'=y+a\\ \end{cases} { 2ax1+2by2=x+b 2ax2+2by1=y+a
    有解的条件是 ( 2 a , 2 b ) ∣ ( x + b ) \small (2a,2b)\mid (x+b) (2a,2b)(x+b) ( 2 a , 2 b ) ∣ ( y + a ) \small (2a,2b)\mid (y+a) (2a,2b)(y+a)
    同理
    情况三:有解的条件是 ( 2 a , 2 b ) ∣ ( x + a ) \small (2a,2b)\mid (x+a) (2a,2b)(x+a) ( 2 a , 2 b ) ∣ ( y + b ) \small (2a,2b)\mid (y+b) (2a,2b)(y+b)
    情况四:有解的条件是 ( 2 a , 2 b ) ∣ ( x + a + b ) \small (2a,2b)\mid (x+a+b) (2a,2b)(x+a+b) ( 2 a , 2 b ) ∣ ( y + a + b ) \small (2a,2b)\mid (y+a+b) (2a,2b)(y+a+b)
  • AC代码
//优化
#pragma GCC optimize(2)
//C
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//C++
//#include<unordered_map>
#include<algorithm>
#include<iostream>
#include<istream>
#include<iomanip>
#include<climits>
#include<cstdio>
#include<string>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
//宏定义
#define N 1010
#define DoIdo main
//#define scanf scanf_s
#define it set<ll>::iterator
//定义+命名空间
typedef long long ll;
typedef unsigned long long ull;
const ll mod = 998244353;
const ll INF = 1e18;
const int maxn = 1e6 + 10;
using namespace std;
//全局变量
//函数区
ll max(ll a, ll b) { return a > b ? a : b; }
ll min(ll a, ll b) { return a < b ? a : b; }
ll gcd(ll a, ll b) { return !b ? a : gcd(b, a % b); }
//主函数
int DoIdo() {
 
    ios::sync_with_stdio(false);
    cin.tie(NULL), cout.tie(NULL);
 
    int T;
    cin >> T;
 
    while (T--) {
        ll a, b, x, y;
        cin >> a >> b >> x >> y;
 
        ll g = gcd(2 * a, 2 * b);
        bool jg = 0;
        if (x % g == 0 && y % g == 0) jg = 1;
        if ((x + a) % g == 0 && (y + b) % g == 0) jg = 1;
        if ((x + b) % g == 0 && (y + a) % g == 0) jg = 1;
        if ((x + a + b) % g == 0 && (y + a + b) % g == 0) jg = 1;
        if (jg) cout << "Y" << endl;
        else cout << "N" << endl;
    }
    return 0;
}
//分割线---------------------------------QWQ
/*
 
 
 
*/
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值