传送门
本题其实就是给定若干个整数向量(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,e1​x1​+e2​x2​=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,e1​y1​+e2​y2​),此外我们还有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,dx2​​y1​−dx1​​y2​),而(d,e1y1+e2y2)(d,e_1y_1+e_2y_2)(d,e1​y1​+e2​y2​)与(0,x2dy1−x1dy2)(0,\frac{x_2}dy_1-\frac{x_1}dy_2)(0,dx2​​y1​−dx1​​y2​)就是与(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 0x2​y1​−x1​y2​​=0成立,于是有(d,e1y1+e2y2)(d,e_1y_1+e_2y_2)(d,e1​y1​+e2​y2​)与(0,x2dy1−x1dy2)(0,\frac{x_2}dy_1-\frac{x_1}dy_2)(0,dx2​​y1​−dx1​​y2​)是线性无关的。而当(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,dx2​​y1​−dx1​​y2​)=(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,e1​y1​+e2​y2​)dx2​​(x1​,y1​)−dx1​​(x2​,y2​)=(0,dx2​​y1​−dx1​​y2​)​⇒{(x1​,y1​)=dx1​​(d,e1​y1​+e2​y2​)+e2​(0,dx2​​y1​−dx1​​y2​)(x2​,y2​)=dx2​​(d,e1​y1​+e2​y2​)−e1​(0,dx2​​y1​−dx1​​y2​)​
反解后不难发现两个向量组可以互相线性表出,也就是两者等价,即{(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,e1​y1​+e2​y2​),(0,dx2​​y1​−dx1​​y2​)}等价,也可以写成∀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−ax​b)。对于为零的情况特判一下即可。

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相关推荐

  1. 2020 China Collegiate Programming Contest Qinhuangdao Site 补题部分

    已经补AEFGK E. Exam Results 枚举+二分+动态开点权值线段树O(nlogN)O(nlogN)O(nlogN) 智商太低,想不到什么贪心只能暴力数据结构维护 对于所有学生的最高成绩只 ...

  2. 2020 China Collegiate Programming Contest Weihai Site补题部分

    A. Golden Spirit 签到题,首先把所有老人带到对岸,然后在对休息讨论一下即可. #define IO ios::sync_with_stdio(false);cin.tie();cout ...

  3. 2020 China Collegiate Programming Contest Weihai Site H.Message Bomb

    H.Message Bomb 题目链接-H.Message Bomb 题目大意 输入sss行数据, 如果t=1t=1t=1,则表示第x个学生加入了第yyy个组.可以肯定的是,这个学生以前不在这个小组里 ...

  4. 2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program

    2019 China Collegiate Programming Contest Qinhuangdao Onsite F. Forest Program 题目链接 The kingdom of Z ...

  5. 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数组中,对于查询修改操作维护一个并查集即可,合并的时候采用启发式 ...

  6. 2020 China Collegiate Programming Contest Changchun F - Strange Memory(dsu on tree + 位运算小技巧)

    题目连接: https://codeforces.com/gym/102832/problem/F 首先写这个题的时候要注意内存的问题 不要瞎几把define int long long 题解: 考虑 ...

  7. 2020 China Collegiate Programming Contest, Weihai B Labyrinth

    写在前面: 这题赛时就过了二十多个人感觉还是榜歪了,完全没有到金牌题的水平,算是一道纯思维题吧,只需要简单的bfs,而且赛中也有一些铜牌区的队伍能过,所以还是要敢于开题,说不定就能写呢 题目链接 La ...

  8. 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) 并且 ...

  9. 2019 China Collegiate Programming Contest Qinhuangdao K. MUV LUV UNLIMITED

    MUV LUV UNLIMITED Link 题目大意:给出一棵树,两人轮流任取(至少取一)当前树上的叶子,最先不能操作的人输. 首先考虑一个情况,若一个叶子节点 x x x 有兄弟,则先手必胜.因为 ...

最新文章

  1. envoy实现_网络通信与治理,谁更在行?Envoy 和 Nginx 对比 | 本月送书活动来啦
  2. 项目三(2)——抽象类
  3. Tensorflow笔记(基础): 图与会话,变量
  4. VS Code 0.5添加ES6支持和Git工具改进
  5. RabbitMQ交换器Exchange介绍与实践
  6. 软件工程——快速掌握面向对象开发方法
  7. 找不到服务器micro,Go Micro服务发现
  8. 疫情政务问答助手算法冠军开源
  9. vmware开机自动进入BIOS vmware 进入BIOS方法
  10. paip.提升安全性----Des加密 java php python的实现总结
  11. 二叉树的镜像(剑指 Offer 27)
  12. 计算机科学技术编程基础教程
  13. 好用的pdf阅读器(便携)
  14. Java中Comparable比较器的基本用法
  15. ESP32 串口读取 jy901s 姿态传感器
  16. 减肥要吃...淡化色斑要吃....皮肤干燥要吃...长了小痘痘要吃...整天对着电脑要吃...记住这些
  17. 书法教育类毕业论文文献包含哪些?
  18. LeetCode151|翻转字符串中的单词III
  19. idea通过添加补丁来破解
  20. Tungsten Fabric如何实现路由的快速收敛?收敛速度有多快?

热门文章

  1. 微信扫码签到系统asp源码写的,并且获取签到者位置信息入库保存
  2. 微信分享次数统计、微信公众号分享关注统计
  3. vs2008 下配置 opencv2.0 的总结,以及 vc6 下配置 opencv1.0 的转帖
  4. 内存规格的解释(Unbuffered DIMM,Registered DIMM和SODIMM)
  5. 承接上篇 Logback 打印SQL配置
  6. 笔记本合上盖子怎么不休眠了?
  7. React---解决跨域
  8. linux用户修改和密码管理
  9. github分支操作
  10. Linux Socket详解 大全 基础知识