10402: C.机器人

Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 53  Solved: 19 [Submit][Status][Web Board]

Description

Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远。由于受软硬件设计所限,机器人卡尔只能定点跳远。若机器人站在(X,Y)位置,它可以原地蹦,但只可以在(X,Y),(X,-Y),(-X,Y),(-X,-Y),(Y,X),(Y,-X),(-Y,X),(-Y,-X)八个点跳来跳去。

现在,Dr. Kong想在机器人卡尔身上设计一个计数器,记录它蹦蹦跳跳的数字变化(S,T),即,路过的位置坐标值之和。

你能帮助Dr. Kong判断机器人能否蹦蹦跳跳,拼出数字(S,T)吗?

假设机器人卡尔初始站在(0,0)位置上。

Input

第一行:             K                表示有多少组测试数据。

接下来有K行,每行:X  Y  S  T

1≤K≤10000   -2*10<= X , Y, S, T <= 2*109

数据之间有一个空格。

Output

对于每组测试数据,输出一行:Y或者为N,分别表示可以拼出来,不能拼出来

Sample Input

3
2 1 3 3
1 1 0 1
1 0 -2 3

Sample Output

Y
N
Y

HINT

 

Source

第七届河南省赛

题解:机器人在一个区域内随便跳,记录坐标变化值;每给两组数据都有

(a1+a2)x + (a3+a4)y = s;  ---> Ax + By = s;
(a1-a2)y + (a3-a4)x = t;  ---> Cx + Dy = t;

由此可见A+C,和B+D都是偶数;所以给定Ax + By = s;Cx + Dy = t;

若有转换成立必定有A+D,和B+C都是偶数;所以转换为求两个方程式的解,解出x,y;也就是上面的A,B,C,D;然后判断有没有解;

代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
#define SI(x) scanf("%d",&x)
#define mem(x,y) memset(x,y,sizeof(x))
#define PI(x) printf("%d",x)
#define P_ printf(" ")
const int INF=0x3f3f3f3f;
typedef long long LL;
LL ex_gcd(LL a,LL b,LL &x,LL &y){
if(!b){
x=1;
y=0;
return a;
}
LL d=ex_gcd(b,a%b,x,y);
LL temp=x;
x=y;
y=temp-a/b*y;
return d;
}
int main(){
int K;
LL X,Y,S,T;
SI(K);
while(K--){
scanf("%lld%lld%lld%lld",&X,&Y,&S,&T);
LL gcd,a,b,c,d;
gcd=ex_gcd(X,Y,a,b);
if(S%gcd!=0||T%gcd!=0){
puts("N");continue;
}
c=a*T/gcd;d=b*T/gcd;
a*=S/gcd;b*=S/gcd;
LL x1,y1,x2,y2;
int flot=0;
for(int t1=-2;t1<=2;t1++){
x1=a+Y/gcd*t1;y1=b-X/gcd*t1;
for(int t2=-2;t2<=2;t2++){
x2=c+Y/gcd*t2;y2=d-X/gcd*t2;
if((x1+y2)%2==0&&(x2+y1)%2==0)flot=1;
}
}
if(flot)puts("Y");
else puts("N");
}
return 0;
}

  

最新文章

  1. Eclipse tooltip变黑的修正
  2. 深入浅出设计模式——单例模式(Singleton Pattern)
  3. SRM 502 DIV1 500pt(DP)
  4. mongoDB知识总结
  5. 编写Word宏使选中的图片改变为固定宽度并保持纵横比
  6. 搭讪培训班 - 名品试用 - YOKA时尚论坛 - YOKA社区
  7. 【云图】如何制作全国KTV查询系统?
  8. Oracle维护:每天的工作
  9. Python 面向对象【2】
  10. MySQL 一些内部原理
  11. 查看tomcat运行日志
  12. java常用设计模式四:观察者模式
  13. Iperf是一个网络性能测试工具
  14. 第二步 使用Cordova 3.0(及以上版本) 创建安卓项目(2014-6-25)
  15. ros 安装c++编译的可执行文件
  16. 【JAVA语法】04Java-多态性
  17. 安装python File &quot;/usr/bin/pip&quot;, line 11, in &lt;module&gt; sys.exit(main()) File &quot;/usr/lib/python3.4/site-packages/pip/__init__.py&quot;, line 215, in main locale.setlocale(locale.LC_ALL, &#39;&#39;) File &quot;/u
  18. Linux环境Nginx安装与调试以及PHP安装
  19. Qt 学习之路 2(76):QML 和 QtQuick 2
  20. C#中三个关键字params,Ref,out

热门文章

  1. php中如何输出当前服务器的(中国)当前时间
  2. new Date().getTime()
  3. javascript数组去重算法-----4(另一种写法)
  4. lucene3.6笔记添加搜索功能
  5. 用正则匹配一串字符串中的ip地址
  6. linux 自旋锁
  7. ItextSharp代码示例
  8. SQL server 2008无法连接Local服务器的解决办法
  9. UnicodeEncodeError: &#39;latin-1&#39; codec can&#39;t encode character 解决sae flask 中文问题
  10. spring mvc 非注解形式