标签:裴蜀 y1 2a 2b small cases equiv 向量 HAOI2011
- 注释:本章同余针对2。
- 题面
- 题意:见题面。
- 解决思路:考虑前四个向量(a,b),(a,−b),(−a,b),(−a,−b),设共取出n个向量,a,−a,b,−b的个数分别为xa1,xa2,yb1,yb2。
{ xa1+xa2=n yb1+yb2=n
n个向量之和为(axa1−axa2,byb1−byb2)
设x1=xa1−xa2,y1=yb1−yb2,证明x1≡y1
n≡p,p的取值为0或1
∴{ xa1+xa2≡p yb1+yb2≡p
∴{ xa1+xa2−2xa2≡p yb1+yb2−2yb2≡p
∴{ xa1−xa2≡p yb1−yb2≡p
∴x1≡y1≡p
证毕!!!
结论:n个向量之和为(ax1,by1),x1≡y1
同理考虑后四个向量(b,a),(b,−a),(−b,a),(−b,−a),设共取出m个向量,设m个向量之和为(by2,ax2),且y2≡x2
八个向量之和为(ax1+by2,by1+ax2),x1≡y1,y2≡x2
∴{ ax1+by2=x x1≡y1 by1+ax2=y y2≡x2
∴{ ax1+by2=x x1≡y1 ax2+by1=y y2≡x2
情况一:x1≡y1≡0,y2≡x2≡0
∴{ ax1+by2=x ax2+by1=y
将同余0的项提出2
∴{ 2ax1′+2by2′=x 2ax2′+2by1′=y
有解的条件是(2a,2b)∣x,(2a,2b)∣y
情况二:x1≡y1≡0,y2≡x2≡1
∴{ ax1+by2=x ax2+by1=y
将同余0的项提出2
∴{ 2ax1′+by2=x ax2+2by1′=y
∴{ 2ax1′+b(y2+1)=x+b a(x2+1)+2by1′=y+a
∴{ 2ax1′+2by2′=x+b 2ax2′+2by1′=y+a
有解的条件是(2a,2b)∣(x+b),(2a,2b)∣(y+a)
同理
情况三:有解的条件是(2a,2b)∣(x+a),(2a,2b)∣(y+b)
情况四:有解的条件是(2a,2b)∣(x+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
/*
*/
标签:裴蜀,y1,2a,2b,small,cases,equiv,向量,HAOI2011 来源: https://blog.csdn.net/qq_45739057/article/details/106226538
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。