acm-(辗转相除法、丢番图方程)2020 China Collegiate Programming Contest Qinhuangdao Site I. Interstellar Hunter
传送门
本题其实就是给定若干个整数向量(x1,y1),(x2,y2),...,(xn,yn)(x_1,y_1),(x_2,y_2),...,(x_n,y_n)(x1,y1),(x2,y2),...,(xn,yn),询问对于整数向量(x,y)(x,y)(x,y)而言是否能够找到一组整数a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an使得a1(x1,y1)+a2(x2,y2)+...+an(xn,yn)=(x,y)a_1(x_1,y_1)+a_2(x_2,y_2)+...+a_n(x_n,y_n)=(x,y)a1(x1,y1)+a2(x2,y2)+...+an(xn,yn)=(x,y)。
首先给出一个结论,任意多个整数向量(x1,y1),(x2,y2),...,(xn,yn)(x_1,y_1),(x_2,y_2),...,(x_n,y_n)(x1,y1),(x2,y2),...,(xn,yn)的整数线性组合所形成的空间可以被两个整数向量(a,b),(0,c)(a,b),(0,c)(a,b),(0,c)通过整数线性组合所表出。
证明:考虑用数学归纳法来证明,
对于一个整数向量(x1,y1)(x_1,y_1)(x1,y1)而言,一定可以被(x1,y1)(x_1,y_1)(x1,y1)和(0,0)(0,0)(0,0)表出,满足要求;
而对于两个整数向量(x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2)(x1,y1),(x2,y2)而言,设d=gcd(x1,x2)d=gcd(x_1,x_2)d=gcd(x1,x2),根据裴蜀定理∃e1,e2∈Z,e1x1+e2x2=d\exist e_1,e_2\in Z,e_1x_1+e_2x_2=d∃e1,e2∈Z,e1x1+e2x2=d,那么我们有e1(x1,y1)+e2(x2,y2)=(d,e1y1+e2y2)e_1(x_1,y_1)+e_2(x_2,y_2)=(d,e_1y_1+e_2y_2)e1(x1,y1)+e2(x2,y2)=(d,e1y1+e2y2),此外我们还有x2d(x1,y1)−x1d(x2,y2)=(0,x2dy1−x1dy2)\frac {x_2}d(x_1,y_1)-\frac{x_1}d(x_2,y_2)=(0,\frac{x_2}dy_1-\frac{x_1}dy_2)dx2(x1,y1)−dx1(x2,y2)=(0,dx2y1−dx1y2),而(d,e1y1+e2y2)(d,e_1y_1+e_2y_2)(d,e1y1+e2y2)与(0,x2dy1−x1dy2)(0,\frac{x_2}dy_1-\frac{x_1}dy_2)(0,dx2y1−dx1y2)就是与(x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2)(x1,y1),(x2,y2)等价的一组基。
注意到若(x1,y1)(x_1,y_1)(x1,y1)与(x2,y2)(x_2,y_2)(x2,y2)线性无关,则x2y1−x1y2≠0x_2y_1-x_1y_2\ne 0x2y1−x1y2=0成立,于是有(d,e1y1+e2y2)(d,e_1y_1+e_2y_2)(d,e1y1+e2y2)与(0,x2dy1−x1dy2)(0,\frac{x_2}dy_1-\frac{x_1}dy_2)(0,dx2y1−dx1y2)是线性无关的。而当(x1,y1)(x_1,y_1)(x1,y1)与(x2,y2)(x_2,y_2)(x2,y2)线性相关时满足(0,x2dy1−x1dy2)=(0,0)(0,\frac{x_2}dy_1-\frac{x_1}dy_2)=(0,0)(0,dx2y1−dx1y2)=(0,0)。
我们再看看这组基为何与(x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2)(x1,y1),(x2,y2)等价,将刚才的两个方程反解一下:
{e1(x1,y1)+e2(x2,y2)=(d,e1y1+e2y2)x2d(x1,y1)−x1d(x2,y2)=(0,x2dy1−x1dy2)⇒{(x1,y1)=x1d(d,e1y1+e2y2)+e2(0,x2dy1−x1dy2)(x2,y2)=x2d(d,e1y1+e2y2)−e1(0,x2dy1−x1dy2)\begin{cases}e_1(x_1,y_1)+e_2(x_2,y_2)=(d,e_1y_1+e_2y_2)\\\frac {x_2}d(x_1,y_1)-\frac{x_1}d(x_2,y_2)=(0,\frac{x_2}dy_1-\frac{x_1}dy_2) \end{cases}\Rightarrow\begin{cases}(x_1,y_1)=\frac{x_1}d(d,e_1y_1+e_2y_2)+e_2(0,\frac{x_2}dy_1-\frac{x_1}dy_2) \\(x_2,y_2)=\frac{x_2}d(d,e_1y_1+e_2y_2)-e_1(0,\frac{x_2}dy_1-\frac{x_1}dy_2)\end{cases}{e1(x1,y1)+e2(x2,y2)=(d,e1y1+e2y2)dx2(x1,y1)−dx1(x2,y2)=(0,dx2y1−dx1y2)⇒{(x1,y1)=dx1(d,e1y1+e2y2)+e2(0,dx2y1−dx1y2)(x2,y2)=dx2(d,e1y1+e2y2)−e1(0,dx2y1−dx1y2)
反解后不难发现两个向量组可以互相线性表出,也就是两者等价,即{(x1,y1),(x2,y2)}\{(x_1,y_1),(x_2,y_2)\}{(x1,y1),(x2,y2)}与{(d,e1y1+e2y2),(0,x2dy1−x1dy2)}\{(d,e_1y_1+e_2y_2),(0,\frac{x_2}dy_1-\frac{x_1}dy_2)\}{(d,e1y1+e2y2),(0,dx2y1−dx1y2)}等价,也可以写成∀x1,y1,x2,y2∈Z,∃a,b,c∈Z\forall x_1,y_1,x_2,y_2\in Z,\exist a,b,c\in Z∀x1,y1,x2,y2∈Z,∃a,b,c∈Z使得{(x1,y1),(x2,y2)}\{(x_1,y_1),(x_2,y_2)\}{(x1,y1),(x2,y2)}与{(a,b),(0,c)}\{(a,b),(0,c)\}{(a,b),(0,c)}等价。
最后我们考虑对于向量组{(x1,y1),(x2,y2)...(xn,yn)}\{(x_1,y_1),(x_2,y_2)...(x_n,y_n)\}{(x1,y1),(x2,y2)...(xn,yn)}而言假设其等价于向量组{(a,b),(0,c)}\{(a,b),(0,c)\}{(a,b),(0,c)},根据数学归纳法,现在新加入一个向量(xn+1,yn+1)(x_{n+1},y_{n+1})(xn+1,yn+1),我们要证明∃a′,b′,c′∈Z\exist a',b',c'\in Z∃a′,b′,c′∈Z使得新的向量组{(x1,y1),...,(xn+1,yn+1)}\{(x_1,y_1),...,(x_{n+1},y_{n+1})\}{(x1,y1),...,(xn+1,yn+1)}仍然与两个向量构成的向量组{(a′,b′),(0,c′)}\{(a',b'),(0,c')\}{(a′,b′),(0,c′)}所等价。
由于{(x1,y1),(x2,y2)...(xn,yn)}\{(x_1,y_1),(x_2,y_2)...(x_n,y_n)\}{(x1,y1),(x2,y2)...(xn,yn)}等价于{(a,b),(0,c)}\{(a,b),(0,c)\}{(a,b),(0,c)},我们不妨看能否将{(a,b),(0,c)}\{(a,b),(0,c)\}{(a,b),(0,c)}与(xn+1,yn+1)(x_{n+1},y_{n+1})(xn+1,yn+1)合并成{(a′,b′),(0,c′)}\{(a',b'),(0,c')\}{(a′,b′),(0,c′)},首先根据前面的结论我们知道∃a′′,b′′,c′′∈Z\exist a'',b'',c''\in Z∃a′′,b′′,c′′∈Z使得{(a,b),(xn+1,yn+1)}\{(a,b),(x_{n+1},y_{n+1})\}{(a,b),(xn+1,yn+1)}等价于{(a′′,b′′),(0,c′′)}\{(a'',b''),(0,c'')\}{(a′′,b′′),(0,c′′)},于是{(a,b),(0,c),(xn+1,yn+1)}\{(a,b),(0,c),(x_{n+1},y_{n+1})\}{(a,b),(0,c),(xn+1,yn+1)}等价于{(a′′,b′′),(0,c′′),(0,c)}\{(a'',b''),(0,c''),(0,c)\}{(a′′,b′′),(0,c′′),(0,c)},注意到{(0,c′′),(0,c)}\{(0,c''),(0,c)\}{(0,c′′),(0,c)}等价于{(0,gcd(c,c′′))}\{(0,gcd(c,c''))\}{(0,gcd(c,c′′))},也就是说{(a′′,b′′),(0,c′′),(0,c)}\{(a'',b''),(0,c''),(0,c)\}{(a′′,b′′),(0,c′′),(0,c)}等价于{(a′′,b′′),(0,gcd(c,c′′))}\{(a'',b''),(0,gcd(c,c''))\}{(a′′,b′′),(0,gcd(c,c′′))},令c′′′=gcd(c,c′′)c'''=gcd(c,c'')c′′′=gcd(c,c′′),因此我们有∀x1,y1,x2,y2,...,xn+1,yn+1∈Z,∃a′′,b′′,c′′′∈Z\forall x_1,y_1,x_2,y_2,...,x_{n+1},y_{n+1}\in Z,\exist a'',b'',c'''\in Z∀x1,y1,x2,y2,...,xn+1,yn+1∈Z,∃a′′,b′′,c′′′∈Z使得{(x1,y1),(x2,y2),...,(xn+1,yn+1)}\{(x_1,y_1),(x_2,y_2),...,(x_{n+1},y_{n+1})\}{(x1,y1),(x2,y2),...,(xn+1,yn+1)}等价于{(a′′,b′′),(0,c′′′)}\{(a'',b''),(0,c''')\}{(a′′,b′′),(0,c′′′)}。
换句话说,对于任何向量组而言,它们都一定等价于某两个向量的构成的向量组,且这两个向量的形式为(a,b),(0,c)(a,b),(0,c)(a,b),(0,c)。
有了这个结论后,我们考虑维护一个两个基向量(a,b),(0,c)(a,b),(0,c)(a,b),(0,c),初始化a=b=c=0a=b=c=0a=b=c=0,每加入一个向量就考虑将这个新的向量与(a,b),(0,c)(a,b),(0,c)(a,b),(0,c)进行合并,得到(a′,b′),(0,c′)(a',b'),(0,c')(a′,b′),(0,c′)。可以写个merge(A,B)merge(A,B)merge(A,B)函数用来合并AAA与BBB向量。
对于查询(x,y)(x,y)(x,y)而言,若aaa不为零,首先要满足a∣xa\mid xa∣x,然后若ccc不为零还要看是否满足c∣(y−xab)c\mid (y-\frac xab)c∣(y−axb)。对于为零的情况特判一下即可。
struct Node{ll x,y;
};
void merge(Node &a,Node &b){if(!a.x && !b.x){a.y=__gcd(a.y,b.y);b.x=b.y=0;}else if(!a.y && !b.y){a.x=__gcd(a.x,b.x);b.x=b.y=0;}while(b.x){ll t=a.x/b.x;a.x-=t*b.x,a.y-=t*b.y;swap(a,b);}b.y=abs(b.y);if(a.x<0)a.x*=-1,a.y*=-1;if(b.y)a.y=(a.y%b.y+b.y)%b.y;
}
bool check(Node a,Node b,Node c){if(a.x){if(c.x%a.x)return false;ll k=c.x/a.x;c.y-=a.y*k;}else if(c.x)return false;if(!b.y)return !c.y;return !(c.y%b.y);
}
int main(){int t=rd(),kase=0;while(t--){int q=rd();ll ans=0;Node a={0,0},b={0,0};while(q--){int op=rd(),x=rd(),y=rd(),w=0;if(op==1){Node c={x,y};merge(a,c);merge(b,c);merge(a,b);}else{w=rd();Node c={x,y};if(check(a,b,c))ans+=w;}}printf("Case #%d: %lld\n",++kase,ans);}
}
acm-(辗转相除法、丢番图方程)2020 China Collegiate Programming Contest Qinhuangdao Site I. Interstellar Hunter相关推荐
- 2020 China Collegiate Programming Contest Qinhuangdao Site 补题部分
已经补AEFGK E. Exam Results 枚举+二分+动态开点权值线段树O(nlogN)O(nlogN)O(nlogN) 智商太低,想不到什么贪心只能暴力数据结构维护 对于所有学生的最高成绩只 ...
- 2020 China Collegiate Programming Contest Weihai Site补题部分
A. Golden Spirit 签到题,首先把所有老人带到对岸,然后在对休息讨论一下即可. #define IO ios::sync_with_stdio(false);cin.tie();cout ...
- 2020 China Collegiate Programming Contest Weihai Site H.Message Bomb
H.Message Bomb 题目链接-H.Message Bomb 题目大意 输入sss行数据, 如果t=1t=1t=1,则表示第x个学生加入了第yyy个组.可以肯定的是,这个学生以前不在这个小组里 ...
- 2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program
2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program 题目链接 The kingdom of Z ...
- acm -(并查集、启发式合并、gcd、枚举因子)2020 China Collegiate Programming Contest Changchun Onsite K. Ragdoll
传送门 本题考虑直接对每个iii求出所有满足ij=gcd(i,j)i^j=gcd(i,j)ij=gcd(i,j)的jjj,然后存在ggg数组中,对于查询修改操作维护一个并查集即可,合并的时候采用启发式 ...
- 2020 China Collegiate Programming Contest Changchun F - Strange Memory(dsu on tree + 位运算小技巧)
题目连接: https://codeforces.com/gym/102832/problem/F 首先写这个题的时候要注意内存的问题 不要瞎几把define int long long 题解: 考虑 ...
- 2020 China Collegiate Programming Contest, Weihai B Labyrinth
写在前面: 这题赛时就过了二十多个人感觉还是榜歪了,完全没有到金牌题的水平,算是一道纯思维题吧,只需要简单的bfs,而且赛中也有一些铜牌区的队伍能过,所以还是要敢于开题,说不定就能写呢 题目链接 La ...
- 2018 China Collegiate Programming Contest - Jilin Site F - The Hermit HDU - 6560 思维
链接Problem - 6560 题意 有n个站点每个站点可以发送完美信号 关于完美信号的定义 有i j k三个站点 分别保证 i<j<k dis(i,j)> dis(j,k) 并且 ...
- 2019 China Collegiate Programming Contest Qinhuangdao K. MUV LUV UNLIMITED
MUV LUV UNLIMITED Link 题目大意:给出一棵树,两人轮流任取(至少取一)当前树上的叶子,最先不能操作的人输. 首先考虑一个情况,若一个叶子节点 x x x 有兄弟,则先手必胜.因为 ...
最新文章
- envoy实现_网络通信与治理,谁更在行?Envoy 和 Nginx 对比 | 本月送书活动来啦
- 项目三(2)——抽象类
- Tensorflow笔记(基础): 图与会话,变量
- VS Code 0.5添加ES6支持和Git工具改进
- RabbitMQ交换器Exchange介绍与实践
- 软件工程——快速掌握面向对象开发方法
- 找不到服务器micro,Go Micro服务发现
- 疫情政务问答助手算法冠军开源
- vmware开机自动进入BIOS vmware 进入BIOS方法
- paip.提升安全性----Des加密 java php python的实现总结
- 二叉树的镜像(剑指 Offer 27)
- 计算机科学技术编程基础教程
- 好用的pdf阅读器(便携)
- Java中Comparable比较器的基本用法
- ESP32 串口读取 jy901s 姿态传感器
- 减肥要吃...淡化色斑要吃....皮肤干燥要吃...长了小痘痘要吃...整天对着电脑要吃...记住这些
- 书法教育类毕业论文文献包含哪些?
- LeetCode151|翻转字符串中的单词III
- idea通过添加补丁来破解
- Tungsten Fabric如何实现路由的快速收敛?收敛速度有多快?