제출 #1364384

#제출 시각아이디문제언어결과실행 시간메모리
1364384jinhan814RUN Sequence (KAISTRUN26SPRING_B)C++20
50 / 100
1100 ms210044 KiB
#include <bits/stdc++.h>
using namespace std;

// debug /*{{{*/
#define debug(...) __dbg(#__VA_ARGS__, __VA_ARGS__)

template<typename T> concept Container = ranges::range<T> && !convertible_to<T, string_view>;
template<typename T, typename U> ostream& operator<<(ostream& out, const pair<T, U>& v);
template<typename... Args> ostream& operator<<(ostream& out, const tuple<Args...>& v);
template<Container T> ostream& operator<<(ostream& out, const T& v);

template<typename T, typename U>
ostream& operator<<(ostream& out, const pair<T, U>& v) {
	out << '(' << v.first << ' ' << v.second << ')';
	return out;
}

template<typename... Args>
ostream& operator<<(ostream& out, const tuple<Args...>& v) {
	string _;
	out << '(';
	apply([&](auto&&... x) { (..., (out << _ << x, _ = " ")); }, v);
	out << ')';
	return out;
}

template<Container T>
ostream& operator<<(ostream& out, const T& v) {
	string _;
	out << '(';
	for (auto i : v) out << _ << i, _ = " ";
	out << ')';
	return out;
}

template<typename ...Args>
void __dbg(string s, Args&&... x) {
	string _;
	cerr << '(' << s << ") : ";
	(..., (cerr << _ << x, _ = ", "));
	cerr << endl;
}
/*}}}*/

using i64 = long long;

auto naive = [](int n, int a, int b) {
	vector f(n, i64(0));
	f[1] = 1;
	for (int i = 2; i <= n - 1; i++) f[i] = f[i - 1] + f[i - 2];
	set s{ i64(0) }; s.clear();
	for (int x = 1; x <= a; x++) {
		for (int y = 1; y <= b; y++) {
			s.insert(f[n - 2] * x + f[n - 1] * y);
		}
	}
	return (i64)s.size();
};

auto sol = [](int n, int a, int b) {
	if (n >= 46) return i64(a) * b;
	vector f(n, i64(0));
	f[1] = 1;
	for (int i = 2; i <= n - 1; i++) f[i] = f[i - 1] + f[i - 2];
	return naive(n, a, b);
	set s{ i64(0) }; s.clear();
	for (int x = 1; x <= a; x++) {
		for (int y = 1; y <= b; y++) {
			s.insert(f[n - 2] * x + f[n - 1] * y);
		}
	}
	return (i64)s.size();
};

auto test = [] {
	for (int n = 3; n <= 45; n++) {
		debug(n);
		for (int a = 1; a <= 20; a++) {
			for (int b = 1; b <= 20; b++) {
				i64 r1 = naive(n, a, b);
				i64 r2 = sol(n, a, b);
				if (r1 == r2) continue;
				debug(n, a, b);
				debug(r1);
				debug(r2);
				exit(0);
			}
		}
	}
	exit(0);
};

int main() {
	cin.tie(0)->sync_with_stdio(0);
	int n, a, b; cin >> a >> b >> n;
	cout << sol(n, a, b) << '\n';
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…