[BZOJ2299] [HAOI2011]向量
2016-02-28 23:16
302 查看
传送门
http://www.lydsy.com/JudgeOnline/problem.php?id=2299题目大意
给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y)。题解
其实就是(a,b),(a,−b),(b,a),(b,−a)(a,b),(a,-b),(b,a),(b,-a)四个,设分别用它们的次数为t1,t2,t3,t4t_1,t_2,t_3,t_4然后列方程组
a(t1+t2)+b(t3+t4)=xa(t3−t4)+b(t1−t2)=ya(t_1+t_2)+b(t_3+t_4)=x\\a(t_3-t_4)+b(t_1-t_2)=y
我们很容易发现两数之和和之差奇偶性是相同的
就用扩展欧几里德解出来然后调整再判奇偶性即可
var v,l:longint; a,b,aa,bb,x,y,xx,yy,o,p,q,r,tt:int64; function gcd(a,b:int64):int64; begin if b=0 then gcd:=a else gcd:=gcd(b,a mod b); end; procedure exgcd(a,b:int64;var x,y:int64); var c:int64; begin if b=0 then begin x:=1; y:=0; end else begin exgcd(b,a mod b,x,y); c:=x; x:=y; y:=c-y*(a div b); end; end; begin readln(v); for l:=1 to v do begin readln(a,b,x,y); tt:=gcd(a,b); if (x mod tt<>0)or(y mod tt<>0) then begin writeln('N'); continue; end; xx:=x div tt; yy:=y div tt; aa:=a div tt; bb:=b div tt; exgcd(aa,bb,o,p); o:=xx*o; p:=xx*p; exgcd(aa,bb,q,r); q:=yy*q; r:=yy*r; aa:=aa mod 2; bb:=bb mod 2; if (o mod 2=r mod 2)and(p mod 2=q mod 2) then begin writeln('Y'); continue; end; if (((o mod 2<>r mod 2)and(p mod 2=q mod 2))or((o mod 2=r mod 2)and(p mod 2<>q mod 2)))and(((aa=0)and(bb=1))or((aa=1)and(bb=0))) then begin writeln('Y'); continue; end; if (o mod 2<>r mod 2)and(p mod 2<>q mod 2)and((aa=1)or(bb=1)) then begin writeln('Y'); continue; end; writeln('N'); end; end.
相关文章推荐
- C++多线程socket系统新编
- 最小二乘法 (转)good
- 线段树区间更新&&求和poj3486
- 【J2EE入门】13个规范
- 弹弓游戏2
- 【J2EE入门】13个规范
- Spark源码分析之八:Task运行(二)
- USACO Dual Pal 4000 indromes 解题日志
- 利用AutoCAD I/O 和View & Data 做DWG图纸的无纸化签字
- 经典排序整理
- 为IT人士推荐的两款护眼应用
- 数组
- android gif动画开源框架android-gif-drawable
- android gif动画开源框架android-gif-drawable
- android gif动画开源框架android-gif-drawable
- 从C++转向java——5、数组
- WEB标准:标准定义、好处、名词解释、常用术语、命名习惯、浏览器兼容、代码书写规范
- berkeley db 组提交机制 group commit
- Modernizr的介绍和使用
- 出差(五)