HDU4596 Yet another end of the world
题意
有n个虫洞,每个虫洞有三个参数X、Y、Z,如果存在一个ID,可以使ID%X在[Y,Z]区间内,则这个虫洞将可以吸引飞船,但是,如果同时两个或者两个以上的虫洞可以吸引飞船,那么飞船将被撕碎,不能通过。
分析
由于我们的目的是:确定每两个虫洞的参数之间不存在一个ID,ID满足:
Ax1+C=ID
BX2+D=ID
X1,X2是两个虫洞的X参数,C在Y1,Z1之间取值,D在Y2,Z2之间取值。
然后,我当时就。。卡住了,把这个式子转化成了两个同余方程,但是其实不用计算ID,因为我们的目的是存在ID,然后C,D都是存在的,所以只要A,B存在就可以了,所以联立式子变成一个二元一次不定方程,然后根据数论的不定方程的相关知识:
AX1-Bx2=D-C
X1≡(D-C)(mod X2)
这个同余方程有解的条件是(D-C)%gcd(x1,x2)==0
然后对每两组虫洞的参数,看在D-C取值范围内的是否存在gcd(x1,x2)的整数倍,队友是用容斥判断的,我写的是分类讨论,虽然被基友说过很多次了。。不要老用分类讨论,要证明要证明,分类讨论通常会漏掉很多情况(比如上次的西电校赛网络赛的贪心。。),嘛这次以后!!!我会改的!!!(不过很多情况下第一反应还是分类讨论啊。。
1 | #include <bits/stdc++.h> |