(擴展歐幾里德算法)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.pswp.cn/news/531490.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531490.shtml
英文地址,請注明出處:http://en.pswp.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;工程文件 &…