185362025-10-26 12:15:55ubormaciJárdakövezéscpp17Hibás válasz 0/751ms568 KiB
#include <iostream>
#include <algorithm> // for sort, mainly
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <array>
#include <string>
#include <cstdio>
#include <iterator>
#include <unordered_set>
#include <cstdint> // for int64_t, int32_t, etc
#include <queue>
#include <stack>
#include <deque>
#include <numeric> // gcd, lcm
#include <fstream>
#include <bitset> // for bitset
#include <iomanip>
#include <cassert> // for set with custom ordering
#include <type_traits> // for set with custom ordering
#include <utility> // for swap, forward, etc
using namespace std;

#pragma GCC optimize("O2")
// #pragma GCC optimize("O1","O2","O3","Ofast","unroll-loops")
// #pragma GCC target("sse","sse2","sse3","sse4.1","sse4.2","avx","avx2","fma")

template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; }
template<typename T_container, typename T = typename enable_if<!is_same<T_container, string>::value, typename T_container::value_type>::type> ostream& operator<<(ostream &os, const T_container &v) { os << '{'; string sep; for (const T &x : v) os << sep << x, sep = ", "; return os << '}'; }
void dbg_out() { cout << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); }
#ifdef LOCAL
#define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

/*

notes:

int64_t
stoi(string s) -> string to int
to_string() -> int (or else) to string

vector declaration:
vector<ll> v(n, 0)
vector<vector<ll>> v(n, vector<ll>(n, 0));

{if statement} ? {truth value} : {false value}

#ifdef LOCAL
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
#endif

std::lcm(ll a, ll b), std::gcd(int a, int b)

cout << fixed << setprecision(n);

set with custom ordering
set<ll, decltype(&cmp)> qu(cmp);

*/

typedef int64_t ll;

ll extendedeuclid(ll a, ll b, ll &x, ll &y) {

	if(b == 0) {
		x = 1;
		y = 0;
		return a;
	}

	ll x1, y1;
	ll d = extendedeuclid(b, a % b, x1, y1);
	x = y1;
	y = x1 - y1 * (a / b);
	return d;
}	

pair<ll,ll> solve1(ll h, ll a, ll b) {

	// a * x + b * y = c
	// oldest problem in the book
	// and I'm still shit at it but let's not get so hasty

	// szoval
	// standard extended euclidean algorithm megoldja a * x + b * y = gcd(x, y)
	// es erre ad egy a, b erteket
	// ha c mod gcd = 0, akkor egyszeruen vesszik c / g es beszorozzuk vele az x/y-t

	ll g = gcd(a, b);
	if(h % g != 0) {
		return {0, 0};
	}

	ll x0, y0;
	extendedeuclid(a, b, x0, y0);
	x0 *= h / g;
	y0 *= h / g;

	ll k = 0;
	while(1) {

		ll x = x0 + k * (b/g);
		ll y = y0 - k * (a/g);

		if(x >= 0 && y >= 0) {
			return {x, y};
		}
		k++;
	}

	return {0, 0};
}


pair<ll,ll> solve2(ll h, ll a, ll b) {

	// a * x + b * y = c
	// oldest problem in the book
	// and I'm still shit at it but let's not get so hasty

	// szoval
	// standard extended euclidean algorithm megoldja a * x + b * y = gcd(x, y)
	// es erre ad egy a, b erteket
	// ha c mod gcd = 0, akkor egyszeruen vesszik c / g es beszorozzuk vele az x/y-t

	ll g = gcd(a, b);
	if(h % g != 0) {
		return {0, 0};
	}

	ll x0, y0;
	extendedeuclid(a, b, x0, y0);
	x0 *= h / g;
	y0 *= h / g;

	if(x0 >= 0 && y0 >= 0) {
		return {x0, y0};
	}

	// x = x0 + k * (b/g)
	// y = y0 - k * (a/g)

	/*
	if(x0 < 0 && y0 >= 0) {

		// tehat maximalisan noveljuk az x-et
		// vagyis y-t a leheto legkisebbig levisszuk
		//  y = y0 - k * (a/g)
		// y0 = k * (a/g)
		// k = (y0) / (a/g)

		ll k = y0 / (a/g);

		ll x = x0 + k * (b/g);
		ll y = y0 - k * (a/g);

		return {x, y};
	}

	if(x0 >= 0 && y0 < 0) {

		// x = x0 + k * (b/g)
		// x0 = -k * (b/g)
		// k = -x0 / (b/g)

		ll k = -x0 / (b/g);

		ll x = x0 + k * (b/g);
		ll y = y0 - k * (a/g);

		return {x, y};

	}
	*/

	// x > 0
	// x0 + k * (b/g) > 0
	// k * (b/g) > -x0
	// k > -x0 / (b/g)
	
	// y0 > 0
	// y0 - k * (a/g) > 0
	// -k * (a/g) > -y0
	// k < y0 / (a/g)

	ll kmin = -x0 / (b/g);
	ll kmax = y0 / (a/g);
 
	//cerr << "\nkmin=" << kmin;
	//cerr << "\nkmax=" << kmax;

	if(kmin <= kmax) {
		return {x0 + kmax * (b/g), y0 - kmax * (a/g)};
	}

	return {0, 0};
}

int main()
{
	std::ios_base::sync_with_stdio(false);
	//cin.tie(nullptr);
	//cout.tie(nullptr);

	/*
	for(ll h = 1; h <= 10; h++) {
		for(ll a = 1; a <= 10; a++) {
			for(ll b = 1; b <= 10; b++) {

				cerr << "\n" << h << " " << a << " " << b;

				auto ans1 = solve1(h, a, b);
				auto ans2 = solve2(h, a, b);

				if(ans1 != ans2) {
					cout << "\nPROBLEM " << ans1 << " " << ans2;
				}

			}
		}
	}
	*/

	ll h, a, b;
	cin >> h >> a >> b;

	auto ans = solve2(h, a, b);

	cout << ans.first << " " << ans.second; 	

	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
subtask20/12
2Hibás válasz1ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Hibás válasz1ms316 KiB
11Elfogadva1ms316 KiB
12Hibás válasz1ms316 KiB
13Hibás válasz1ms316 KiB
subtask30/12
14Hibás válasz1ms316 KiB
15Elfogadva1ms316 KiB
16Hibás válasz1ms316 KiB
17Elfogadva1ms316 KiB
18Elfogadva1ms384 KiB
19Hibás válasz1ms508 KiB
20Elfogadva1ms316 KiB
21Hibás válasz1ms316 KiB
22Elfogadva1ms316 KiB
23Elfogadva1ms316 KiB
24Elfogadva1ms316 KiB
25Elfogadva1ms316 KiB
subtask40/24
26Hibás válasz1ms500 KiB
27Elfogadva1ms316 KiB
28Elfogadva1ms508 KiB
29Hibás válasz1ms316 KiB
30Elfogadva1ms524 KiB
31Elfogadva1ms568 KiB
32Elfogadva1ms316 KiB
33Hibás válasz1ms508 KiB
34Hibás válasz1ms348 KiB
35Hibás válasz1ms412 KiB
36Elfogadva1ms316 KiB
37Hibás válasz1ms316 KiB
38Hibás válasz1ms316 KiB
39Hibás válasz1ms316 KiB
40Elfogadva1ms316 KiB
41Hibás válasz1ms508 KiB
42Hibás válasz1ms316 KiB
43Elfogadva1ms316 KiB
44Elfogadva1ms552 KiB
45Elfogadva1ms508 KiB
46Hibás válasz1ms316 KiB
47Elfogadva1ms508 KiB
48Elfogadva1ms316 KiB
49Elfogadva1ms316 KiB
subtask50/27
50Hibás válasz1ms508 KiB
51Elfogadva1ms388 KiB
52Elfogadva1ms328 KiB
53Elfogadva1ms316 KiB
54Elfogadva1ms316 KiB
55Elfogadva1ms316 KiB
56Elfogadva1ms316 KiB
57Hibás válasz1ms316 KiB
58Elfogadva1ms316 KiB
59Elfogadva1ms316 KiB
60Elfogadva1ms316 KiB
61Elfogadva1ms508 KiB
62Elfogadva1ms316 KiB
63Elfogadva1ms316 KiB
64Elfogadva1ms316 KiB
65Elfogadva1ms316 KiB
66Elfogadva1ms316 KiB
67Hibás válasz1ms316 KiB
68Hibás válasz1ms316 KiB
69Hibás válasz1ms316 KiB
70Hibás válasz1ms316 KiB
71Hibás válasz1ms500 KiB
72Elfogadva1ms320 KiB
73Elfogadva1ms316 KiB
74Elfogadva1ms316 KiB
75Elfogadva1ms316 KiB
76Elfogadva1ms316 KiB