(扩展欧几里德算法)zzuoj 10402: C.机器人

                        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的结果为偶数!
*/  

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<vector>
 6 #include<map>
 7 #include<queue>
 8 #define MAX 0x3f3f3f3f
 9 #define N 550
10 using namespace std;
11 
12 long long exgcd(long long a,long long b,long long &x,long long &y)
13 {
14     if(b==0)
15     {
16         x=1;
17         y=0;
18         return a;
19     }
20     long long r=exgcd(b,a%b,x,y);
21     long long t=x;
22     x=y;
23     y=t-a/b*y;
24     return r;
25 }
26 
27 /*
28     x = x + b/gcd(a, b)*t;
29     y = y - a/gcd(a, b)*t;
30 */
31 
32 int main() {
33     int k;
34     long long x, y, s, t;
35     scanf("%d", &k);
36     while(k--){
37         scanf("%lld%lld%lld%lld", &x, &y, &s, &t);
38         long long a, b, c, d, g;
39         g = exgcd(x, y, a, b);
40         c = a;
41         d = b;
42         if(s%g==0 && t%g==0){
43             a = a*(s/g);
44             b = b*(s/g);
45             c = c*(t/g);
46             d = d*(t/g);
47             bool flag = false;
48             for(int i=-2; i<=2 && !flag; ++i){
49                 long long aa, bb;
50                 aa = a+x/g*i;
51                 bb = b-y/g*i;
52                 for(int j=-2; j<=2 && !flag; ++j){
53                     long long cc, dd;
54                     cc = c+x/g*j;
55                     dd = d-y/g*j; 
56                     if((aa+dd)%2==0 && (bb+cc)%2==0)
57                         flag = true;
58                 }
59             }
60             if(flag)    printf("Y\n");
61             else printf("N\n");
62         } else {
63             printf("N\n") ;
64         }
65     }
66     return 0;
67 }

 

转载于:https://www.cnblogs.com/hujunzheng/p/4483343.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim配置之snippets代码块

&#xff08;一&#xff09;目的 我们在编写程序的过程中&#xff0c;经常会敲一些重复的代码&#xff0c;我们可以利用snippets来达到输入简写来敲出完整的代码 &#xff08;二&#xff09;安装步骤 安装使用Vundle,没有vbundle的先执行下面的命令 git clone https://gith…

Ubuntu 16.04 安装CodeBlocks

博主作为嵌入式开发者&#xff0c;经常使用c/c开发&#xff0c;所以今天来装一下经常使用的codeblocks&#xff0c;linux下代码编辑器有好多&#xff0c;可以上网搜一下linux下常用的代码编辑器就会出来好多&#xff0c;codeblocks作为c/c编辑器很方便&#xff0c;无论是安装还…

svn的安装与使用

Eclipse安装SVN插件 1、下载最新的Eclipse&#xff0c;我的版本是3.7.2 indigo(Eclipse IDE for Java EE Developers)版 如果没有安装的请到这里下载安装&#xff1a;http://eclipse.org/downloads/ 2、下载SVN插件subclipse&#xff0c;安装方法有两种.那种绿色的以link方式安…

c语言实现跳动的心

本文章分为两部分&#xff1a;第一部分为实现多彩的心&#xff0c;第二部分是实现心得跳动&#xff0c;两个代码均独立运行 本篇文章转载自公众号&#xff1a; C语言程序设计基础知识 &#xff08;一&#xff09;C语言实现多彩的心 实现过程其实很简单 首先使用for循环绘制心…

structs2之多文件上传

//首先是Action部分import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.UnsupportedEncodingException; import java.util.List;import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext;i…

Linux下使用消息队实现 ATM 自动取款机功能

文章分五部分&#xff1a;需求分析、项目所需知识点、思路讲解、代码实现、功能演示 本文内容较长&#xff0c;建议是按照我自己的思路给大家讲解的&#xff0c;如果有其他问题&#xff0c;欢迎评论区讨论 文章中的代码是在linux下编译实现的&#xff0c;注意自己的环境。 &…

200行代码实现视频人物实时去除

今天在GitHub上发现了一个好玩的代码&#xff0c;短短几百行代码就实现了从复杂的背景视频中去除人物&#xff0c;不得不说这位大佬比较厉害。 这个项目只需要在网络浏览器中使用JavaScript&#xff0c;用200多行TensorFlow.js代码&#xff0c;就可以实时让视频画面中的人物对…

codeforces C. Vanya and Scales

C. Vanya and ScalesVanya has a scales for weighing loads and weights of masses w0, w1, w2, ..., w100 grams where w is some integer not less than 2(exactly one weight of each nominal value). Vanya wonders whether he can weight an item with mass m using …

菱形继承和虚继承、对象模型和虚基表

1.菱形继承&#xff08;钻石继承&#xff09;&#xff1a;两个子类继承同一父类&#xff0c;而又有子类同时继承这两个子类。例如B,C两个类同时继承A&#xff0c;但是又有一个D类同时继承B,C类。 2.菱形继承的对象模型 class A { public:int _a; };class B :public A { p…

c++虚函数和虚函数表

前言 &#xff08;1&#xff09;虚基表与虚函数表是两个完全不同的概念 虚基表用来解决继承的二义性(虚基类可以解决)。虚函数用来实现泛型编程&#xff0c;运行时多态。 &#xff08;2&#xff09;虚函数是在基类普通函数前加virtual关键字&#xff0c;是实现多态的基础 &a…

Struts.xml中Action的method与路径的三种匹配方法

原文 http://blog.csdn.net/woshixuye/article/details/7734482 首先我们有一个Action——UserAction public class UserAction extends ActionSupport { public String add() { return "add"; } public String modify() { return …

VS2017安装配置Qt

这篇文章作为qt的开发环境配置篇&#xff0c;记录如何在vs2017中安装qt的 所需软件下载链接如下&#xff1a; QT下载链接&#xff1a;QT visual studio下载链接&#xff1a;visual studio 这里推荐安装最新的&#xff0c;原因是vs2017不支持一些老版本的makefile文件生成&#…

Qt Creator 常用快捷键

掌握一些适用的快捷键&#xff0c;可以提高程序开发的效率。 快捷键功能F4在同名的头文件和源程序文件之间切换F2跟踪光标下的符号&#xff0c;若是变量&#xff0c;可跟踪到变量声明的地方&#xff1b;若是函数体或函数声 明&#xff0c;可在两者之间切换ShiftF2在函数的声明…

Hibernate学习之hibernate.cfg.xml

<?xml version1.0 encodingUTF-8?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- 正文开始 --> <h…

STM32位带区和位带别名区的浅谈

1.首先谈下为什么要使用位带&#xff1f; 在学习51单片机时就已经使用过位操作&#xff0c;比如使用sbit对单片机IO口的定义&#xff0c;但是STM32中并没有这类关键字&#xff0c;而是通过访问位带别名区来实现&#xff0c;即通过将每个比特位膨胀成一个32位字&#xff0c;当访…

Hibernate的数据查找,添加!

1.首先看一下测试数据库的物理模型 2.测试所需要的Hibernate的jar包 3.数据库的sql /**/ /* DBMS name: MySQL 5.0 */ /* Created on: 2015/7/3 23:17:57 */ /**/drop table if exists books;drop tab…

新手如何在Altium Designer中绘制电路板

好久没用AD画电路板了&#xff0c;这次电子实训让画个PCB板&#xff0c;借着这个机会写了一篇新手教程。 此教程所用的电路图是自动循迹小车&#xff0c;虽然元件比较简单&#xff0c;但是感觉还是很厉害的&#xff0c;一块看一下吧。 此教程仅适用于没有基础的同学 一、概述 …

Hibernate的数据删除,更改

其他未给出代码&#xff0c;请参考上一篇.... 一.数据的删除 方法1.从“多”的一方进行数据的删除 books.hbm.xml文件不变&#xff1a; <many-to-one name"publishers" column"publisherId" class"com.entry.Publishers" lazy"false&quo…

STM32的AFIO时钟什么时候开启?

问题描述 在使用STM32的USART2时发现AFIO时钟无论打不打开串口都能正常工作 带着这个问题网上搜集了一些资料&#xff0c;由于我对这块的理解并不是很深&#xff0c;如果有错误欢迎指正 首先为什么要开启时钟&#xff1f; 答&#xff1a;因为STM32几乎所有的外设都有独立的时…

Qt模仿QQ登录界面(一)

这两天研究qt&#xff0c;练习时做了个仿QQ登录界面&#xff0c;我这次实现的比较简单&#xff0c;先在这里记录一下&#xff0c;以后有空了会继续完善的。 &#xff08;一&#xff09;效果图 这里使用我的qq号测试的如图&#xff1a; &#xff08;二&#xff09;工程文件 &…