X-Magic Pair gcd,剪枝(1600)
题意 :
- 给一个数对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)相关推荐
- AIR 配置文件(*-app.xml)说明(转)
近日研究Air..对它的一些配置文件作了修改...好多窗体属性都是来自那个文件..后来在网上看到一篇更详细的.作者很用心的用中文标示出来了...谢谢了... 转自http://www.skill8.c ...
- Flex读取txt文件里的内容(二)
Flex读取txt文件里的内容 自己主动生成的文件 LoadTxt-app.xml: <?xml version="1.0" encoding="utf-8&quo ...
- 2017.3.14 游戏(scoi2009) 失败总结
这是个啥?群论?所有置换群的和?polya我还不会啊. 硬着头皮做 其实第一眼把题看错了,以为是求最大的置换群,搞了半天,但手玩推出了一个定理: n的置换群的方案种数=相加等于n的数的每种数的lcm ...
- 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,有两种选 ...
- Codeforces 359D Pair of Numbers | 二分+ST表+gcd
题面: 给一个序列,求最长的合法区间,合法被定义为这个序列的gcd=区间最小值 输出最长合法区间个数,r-l长度 接下来输出每个合法区间的左端点 题解: 由于区间gcd满足单调性,所以我们可以二分区间 ...
- 我花了三个小时写了一道题的六千字题解....(POJ 2888 Magic Bracelet)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 前置知识:小学生都能看懂的群论从入门到升天教程 <群论全家桶> 一道简单的题目 Probl ...
- Pair:医学图像标注神器
点击上方"CVer",选择加"星标"置顶 重磅干货,第一时间送达 在AI新基建时代,智能化医疗成为一种潮流趋势,其中医学影像标注为智能化医疗研究提供了基础金标准 ...
- 【AcWing 165】 小猫爬山 简单dfs + 剪枝优化
翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆 ...
- 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-爬虫简介
- oh-my-zsh 功能收集
- 业内首创普惠保险,看国泰产险如何借助数据进行智能化的升级和战略转型
- js 循环拆词_js 各种循环语法
- 【百科】走近飞天:伏羲——资源调度服务
- python矩阵转置_Python 矩阵转置的几种方法小结
- hikaricp 连接池分析_Spring Boot如何使用HikariCP连接池详解
- 我把朋友圈关掉了235天
- Java自定义拦截器详细教程
- step7支持linux,STEP7 V5.4版本要求的操作系统-工业支持中心-西门子中国
- 华为透露成长秘诀:信息化建设铸就发展奇迹
- 使用Jade和Grunt加快HTML的产生
- JavaScript复习,this指向、原型链、变量提升、作用域、闭包
- 数学史上10个备受质疑的伟大时刻
- Aras Innovator PLM二次开发
- 我干区块链这一月,见证从风口到“枪口”
- 测向交叉定位matlab,一种三维多站测向交叉定位算法
- shiro salt
- 打印web页或文本文件时如何去掉讨厌的页眉,页脚?--暨开篇
- 也许你我都在等待~~~~~~~~~~~~~~~~