Educational Codeforces Round 117 (Rated for Div. 2) D

这篇博客探讨了一道数学找规律题目,涉及将两个数通过操作使其一数变为差值绝对值的过程。作者指出每次操作会使较大数变为两数差,并讨论了在大数据情况下使用取模运算进行优化的策略。通过判断b是否能通过取模运算等于x,解决了TLE问题。代码实现中包含了关键的判断条件和优化步骤。
摘要由CSDN通过智能技术生成

数学找规律题,真的妙蛙种子吃妙脆角——妙到家了

题意:给定两个数,操作为使两数之一变为他们差值的绝对值,给定x,问操作过程中能否使两数之一变为x?

首先模拟一下操作过程中数的变化

可以观察出,每次变化都会分出两个分支,而其中一个分支会指向另一分支与原数据,因此,要想最小操作步骤就应该按照这样的规律路来变数:每次变换都变换两个数当中较大的数

但是这样由于数据范围为1e18次方,会TLE,思索优化方案

观察大数据情况:发现对于两个较大的数,相减过程会出现较大的差值,导致重复减一个数

因此,可用取模运算优化该步骤,而如何确定取模过程中有无答案出现,进行一下判断

b>=x&&b%a==x%a

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>

#define pb push_back
#define endl '\n'
#define x first
#define y second

using namespace std;

const int N = 200010, M = N;
const int INF = 0x3f3f3f3f;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<int, PII> PIII;
typedef pair<ll, ll> PLL;
int n, m;
//int hh = 0, tt = -1;

bool cmp(PLL a, PLL b) { if (a.y == b.y)return a.x < b.x; else return a.y < b.y; }

void init()
{
}

void solve()
{
	ll a, b, x;
	cin >> a >> b >> x;
	if (a > b)swap(a, b);
	while (a && b)
	{
		if (a > b)swap(a, b);
		if (b % a == x % a && b >= x) {
			puts("YES");
			return;
		}
		b %= a;
	}
	puts("NO");
}

int main()
{
	int _;
	cin >> _;
	//_ = 1;
	while (_--)
	{
		init();
		solve();
	}
	return 0;
}
/*
#                       _oo0oo_
#                      o8888888o
#                      88" . "88
#                      (| -_- |)
#                      0\  =  /0
#                    ___/`---'\___
#                  .' \\|     |// '.
#                 / \\|||  :  |||// \
#                / _||||| -:- |||||- \
#               |   | \\\  -  /// |   |
#               | \_|  ''\---/''  |_/ |
#               \  .-\__  '-'  ___/-. /
#             ___'. .'  /--.--\  `. .'___
#          ."" '<  `.___\_<|>_/___.' >' "".
#         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
#         \  \ `_.   \_ __\ /__ _/   .-` /  /
#     =====`-.____`.___ \_____/___.-`___.-'=====
#                       `=---='
#
#
#     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#               佛祖保佑         永无BUG
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值