10402: C.机器人
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*109 <= 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

欧几里德与扩展欧几里德算法 :http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html

/*
思路:(X,Y),(X,-Y),(-X,Y),(-X,-Y),(Y,X),(Y,-X),(-Y,X),(-Y,-X)
虽然八个点,其实有用的只有四个点,其他的四个点都可以被替代,比如
(x,y)可以替代 (-x, -y) <-> -[(x, y)]
设这四个点是(x,y), (x, -y), (y, x), (y,-x)分别经过a1, a2, a3, a4次
则有
(a1+a2)x + (a3+a4)y = s; ---> Ax + By = s; (很明显的不定方程的形式)
(a1-a2)y + (a3-a4)x = t; ---> Dx + Cy = t;
仔细观察上述式子, A+D 和 B+C 都是 偶数
对于Ax + By = s,可以利用exgcd()求出A, B的值,同理也可以求出D,C的值
如果A,B 为等式的解,那么其余的结为:
A = A + y/gcd(A, B)*t(其中t为任意整数)
B = B + x/gcd(A, B)*t

利用上面的式子, 枚举 A,B,C,D ,知道 满足 A+D 和 B+C的结果为偶数!
*/  

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#define MAX 0x3f3f3f3f
#define N 550
using namespace std; long long exgcd(long long a,long long b,long long &x,long long &y)
{
if(b==)
{
x=;
y=;
return a;
}
long long r=exgcd(b,a%b,x,y);
long long t=x;
x=y;
y=t-a/b*y;
return r;
} /*
x = x + b/gcd(a, b)*t;
y = y - a/gcd(a, b)*t;
*/ int main() {
int k;
long long x, y, s, t;
scanf("%d", &k);
while(k--){
scanf("%lld%lld%lld%lld", &x, &y, &s, &t);
long long a, b, c, d, g;
g = exgcd(x, y, a, b);
c = a;
d = b;
if(s%g== && t%g==){
a = a*(s/g);
b = b*(s/g);
c = c*(t/g);
d = d*(t/g);
bool flag = false;
for(int i=-; i<= && !flag; ++i){
long long aa, bb;
aa = a+x/g*i;
bb = b-y/g*i;
for(int j=-; j<= && !flag; ++j){
long long cc, dd;
cc = c+x/g*j;
dd = d-y/g*j;
if((aa+dd)%== && (bb+cc)%==)
flag = true;
}
}
if(flag) printf("Y\n");
else printf("N\n");
} else {
printf("N\n") ;
}
}
return ;
}

(扩展欧几里德算法)zzuoj 10402: C.机器人的更多相关文章

  1. 欧几里德与扩展欧几里德算法 Extended Euclidean algorithm

    欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd( ...

  2. poj2142-The Balance(扩展欧几里德算法)

    一,题意: 有两个类型的砝码,质量分别为a,b;现在要求称出质量为d的物品, 要用多少a砝码(x)和多少b砝码(y),使得(x+y)最小.(注意:砝码位置有左右之分). 二,思路: 1,砝码有左右位置 ...

  3. poj2115-C Looooops(扩展欧几里德算法)

    本题和poj1061青蛙问题同属一类,都运用到扩展欧几里德算法,可以参考poj1061,解题思路步骤基本都一样.一,题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循 ...

  4. poj1061-青蛙的约会(扩展欧几里德算法)

    一,题意: 两个青蛙在赤道上跳跃,走环路.起始位置分别为x,y. 每次跳跃距离分别为m,n.赤道长度为L.两青蛙跳跃方向与次数相同的情况下, 问两青蛙是否有方法跳跃到同一点.输出最少跳跃次数.二,思路 ...

  5. HDU 1576 A/B 扩展欧几里德算法

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  6. ACM_扩展欧几里德算法

    <pre name="code" class="cpp">/* 扩展欧几里德算法 基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表 ...

  7. 扩展欧几里德算法(递归及非递归实现c++版)

    今天终于弄懂了扩展欧几里德算法,有了自己的理解,觉得很神奇,就想着写一篇博客. 在介绍扩展欧几里德算法之前,我们先来回顾一下欧几里德算法. 欧几里德算法(辗转相除法): 辗转相除法求最大公约数,高中就 ...

  8. POJ 1061 青蛙的约会(扩展欧几里德算法)

    题意:两只青蛙在同一个纬度上跳跃,给定每个青蛙的开始坐标和每秒跳几个单位,纬度长为L,求它们相遇的最短时间. 析:开始,一看只有一组数据,就想模拟一下,觉得应该不会超时,但是不幸的是TLE了,我知道这 ...

  9. POJ1061-青蛙的约会---扩展欧几里德算法求最小整数解

    扩展欧几里得算法模板 #include <cstdio> #include <cstring> #define ll long long using namespace std ...

随机推荐

  1. 51NOD算法马拉松11 B君的竞技场

    传送门 这题我在比赛的时候竟然没有想出来,真是-- 这道题我们可以想一想怎么搞定获胜的概率p. 我们发现再怎么这个p都是搞不了的.所以我们可以积一下分,然后就可以不用去管p了.我们要做的就是求出一个关 ...

  2. Execution Order of Event Functions

    In Unity scripting, there are a number of event functions that get executed in a predetermined order ...

  3. NSString进行urlencode编码

    今天在项目开发过程中,需要给webView传一个url,但是web端需要我将url中的一个变量进行urlencoding编码.这个主要原因是怕这个参数中存在一些转义字符,ok!这个没有问题,一开始我只 ...

  4. \(\S1 \) Gaussian Measure and Hermite Polynomials

    Define on \(\mathbb{R}^d\) the normalized Gaussian measure\[ d \gamma(x)=\frac{1}{(2\pi)^{\frac{d}{2 ...

  5. 解决PHP move_uploaded_file函数移动图片失败

    出现的问题描述:今天在实现一个在用户注册时上传头像图片文件的PHP脚本时,出现了问题:PHP脚本在前面已经确定 浏览器端上传文件没有错误.上传的文件是合法的.上传的文件是图像文件.已经在服务器端生成了 ...

  6. Linux之脚本安装软件

      查看启动程序   ps aux    准备工作 1.保证yum源正常使用 2.关闭SELinux和防火墙   下载脚本文件包 解压缩 运行 ./centors.sh

  7. C# Retry重试操作解决方案(附源码)

    一.前言 (1)对于Thread的Abort方法,如果线程当前正在执行的是一段非托管代码,那么CLR就不会抛出ThreadAbortException,只有当代码继续回到CLR中时,才会引发Threa ...

  8. centos 后台执行C#控制台程序

    1. nohup nohup 无疑是我们首先想到的办法.顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号.让我们先来看一下 nohup 的帮助信息: NOHUP() User Co ...

  9. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.7,优化视频聊天、控制更多相关细节

    在广域网中,由于网络的结构纷繁复杂.而且其实时状况又是千变万化的,所以,要使广域网中的视频聊天达到一个令人满意的效果,存在诸多挑战.这次发布的GG 3.7版本尝试在这一方向上做一些努力,据我自己测试, ...

  10. node(md5)

    md5是一种信息-摘要算法,即针对一段明文给出一个hash值,在密码学中最经典的用法是验证数据的完整性,因为一旦原始数据发生改变那么生成的摘要也必将不同. 网络中md5可以用于用户密码的加密,即在数据 ...