题意 :

  • 给一个数对a,b和一个数x,每次操作可以选择使a或者b变成∣a−b∣|a-b|∣a−b∣(即变成它们的差值),问在若干次(0)操作后,是否能使得a或者b等于x

方案一 :

  • 如果一开始就有一个数等于x,直接true;如果一开始就两个数都小于x,直接false,因为a和b都是正整数,每次操作都会使其中一个变小
  • 对于一对(a,b),假设a>=b,考虑对a操作,此时如果通过若干次操作,使得要求被满足,那么我们可以记为a−p∗b=xa-p*b=xa−p∗b=x,要使得一个正整数p存在,需要满足a>=x,且xa>=x,且xa>=x,且x%b=ab=ab=a%bbb 也就是(a−x)(a-x)(a−x)%b=0b=0b=0,当方程组被满足时,说明有解
  • 如果当前无解,我们可以对余下的数继续进行操作,这就相当于对(b,a(b,a(b,a%b)b)b)这一对数继续进行求解,这一部分我们可以通过递归来实现
  • 过程中还有两个剪枝特判,如果小的那个数为0,直接false;如果满足上述方程组,直接true
#include <iostream>using namespace std;
using ll = long long;ll a, b, x;bool check(ll a, ll b)
{if (b == 0) return false;if (a >= x && a % b == x % b) return true;return check(b, a % b);
}void solve()
{cin >> a >> b >> x;if (a == x || b == x) cout << "Yes" << endl;else if (a < x && b < x) cout << "No" << endl;else{if (a < b) swap(a, b);cout << (check(a, b) ? "Yes" : "No") << endl;}
}int main()
{cin.tie(nullptr) -> sync_with_stdio(false);int _;cin >> _;while (_ -- )solve();
}

方案二 :

  • 这和 更相减损术 很像(每次迭代其中一个数变成了差值),因此想到了gcd
  • 裸gcd不一定能过,因此尽可能的剪枝
  • 讲一下其中的一个剪枝。我们假设a>=b,且每次对a迭代,那么每次a都减少一个b,因此,只要a与x的差值是若干个b,那么直接剪枝判断true
#include <iostream>using namespace std;
using ll = long long;ll a, b, x;bool gcd(ll a, ll b)
{if (a < b) swap(a, b);      // 假设a是大的那个if (a == x || b == x) return true;       // == xif (a == 0 || b == 0) return false;        // x>=1if (a < x && b < x) return false;      // 不可能变成x了if (a >= x && (a - x) % b == 0) return true;    // 大的那个和x的差值是小的那个的倍数return gcd(a % b, b);
}void solve()
{cin >> a >> b >> x;if (a == x || b == x) cout << "YES" << endl;else if (a < x && b < x) cout << "NO" << endl;else cout << (gcd(a, b) ? "YES" : "NO") << endl;
}int main()
{cin.tie(nullptr) -> sync_with_stdio(false);int _;cin >> _;while (_ -- )solve();
}

X-Magic Pair gcd,剪枝(1600)相关推荐

  1. AIR 配置文件(*-app.xml)说明(转)

    近日研究Air..对它的一些配置文件作了修改...好多窗体属性都是来自那个文件..后来在网上看到一篇更详细的.作者很用心的用中文标示出来了...谢谢了... 转自http://www.skill8.c ...

  2. Flex读取txt文件里的内容(二)

    Flex读取txt文件里的内容 自己主动生成的文件 LoadTxt-app.xml: <?xml version="1.0" encoding="utf-8&quo ...

  3. 2017.3.14 游戏(scoi2009) 失败总结

    这是个啥?群论?所有置换群的和?polya我还不会啊. 硬着头皮做 其实第一眼把题看错了,以为是求最大的置换群,搞了半天,但手玩推出了一个定理: n的置换群的方案种数=相加等于n的数的每种数的lcm ...

  4. 2021-2022 ICPC, NERC, Southern and Volga Russian Regional Contest X-Magic Pair(gcd)

    2021-2022 ICPC, NERC, Southern and Volga Russian Regional Contest X-Magic Pair(gcd) 链接 题意:给出a,b,有两种选 ...

  5. Codeforces 359D Pair of Numbers | 二分+ST表+gcd

    题面: 给一个序列,求最长的合法区间,合法被定义为这个序列的gcd=区间最小值 输出最长合法区间个数,r-l长度 接下来输出每个合法区间的左端点 题解: 由于区间gcd满足单调性,所以我们可以二分区间 ...

  6. 我花了三个小时写了一道题的六千字题解....(POJ 2888 Magic Bracelet)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 前置知识:小学生都能看懂的群论从入门到升天教程 <群论全家桶> 一道简单的题目 Probl ...

  7. Pair:医学图像标注神器

    点击上方"CVer",选择加"星标"置顶 重磅干货,第一时间送达 在AI新基建时代,智能化医疗成为一种潮流趋势,其中医学影像标注为智能化医疗研究提供了基础金标准 ...

  8. 【AcWing 165】 小猫爬山 简单dfs + 剪枝优化

    翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆 ...

  9. B. Serval and Inversion Magic

    Problem - B - Codeforces Serval has a string s� that only consists of 0 and 1 of length n�. The i�-t ...

最新文章

  1. 跟我学爬虫-1-爬虫简介
  2. oh-my-zsh 功能收集
  3. 业内首创普惠保险,看国泰产险如何借助数据进行智能化的升级和战略转型
  4. js 循环拆词_js 各种循环语法
  5. 【百科】走近飞天:伏羲——资源调度服务
  6. python矩阵转置_Python 矩阵转置的几种方法小结
  7. hikaricp 连接池分析_Spring Boot如何使用HikariCP连接池详解
  8. 我把朋友圈关掉了235天
  9. Java自定义拦截器详细教程
  10. step7支持linux,STEP7 V5.4版本要求的操作系统-工业支持中心-西门子中国
  11. 华为透露成长秘诀:信息化建设铸就发展奇迹
  12. 使用Jade和Grunt加快HTML的产生
  13. JavaScript复习,this指向、原型链、变量提升、作用域、闭包
  14. 数学史上10个备受质疑的伟大时刻
  15. Aras Innovator PLM二次开发
  16. 我干区块链这一月,见证从风口到“枪口”
  17. 测向交叉定位matlab,一种三维多站测向交叉定位算法
  18. shiro salt
  19. 打印web页或文本文件时如何去掉讨厌的页眉,页脚?--暨开篇
  20. 也许你我都在等待~~~~~~~~~~~~~~~~

热门文章

  1. LSMW批处理使用方法(09)_步骤10、11
  2. WebService到底是什么?
  3. SAP 库存相关表格
  4. 3、Power Query-智能汇总工作簿下的指定或所有工作表数据
  5. 实施hybris必须懂java吗
  6. 订单BOM与销售BOM的区别
  7. Smartforms常见的问题
  8. ABAP:List中回写CheckBox的值到内表
  9. 永洪Desktop安装后启动提示缺少libv8_libbase.dll文件解决办法
  10. 干货:如何进行用户流失分析与预警?