Utawarerumono GCD C++

题目链接: [Utawarerumono]


大致题意:

给出一个关于变量x,y的不定方程ax+by=c,若无解,输出Kuon,若有解,找到满足p*x2+p1* x+q2* y2+q1* y最小解的一组,输出p* *x2+p1* x+q2* y2+q1* y的值


解题思路:

判断ax+by=c是否有解,无解:c不能整除gcd(a,b)或者a == 0 && b == 0 && c != 0
暴力枚举x,找到满足条件的最小值


AC代码:

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ll a, b, c, p1, p2, q1, q2;
ll gcd(ll a, ll b) {
	return b == 0 ? a : gcd(b, a % b);
}
int main(void)
{
	cin >> a >> b >> c >> p1 >> p2 >> q1 >> q2;
	ll d = gcd(a, b);
	if (c % d || a == 0 && b == 0 && c != 0)cout << "Kuon" << endl;
	else {
		ll ans = 1e18;
		for (int x = -100000; x <= 100000; ++x) {
			if ((c - a * x) % b == 0) {
				ll y = (c - a * x) / b;
				ans = min(ans, p1 * x + p2 * x * x + q1 * y + q2 * y * y);
			}
		}
		cout << ans << endl;
	}
	return 0;
}

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值