POI2012ROZ-Fibonacci Representation

xiaruize發表於2024-04-25

POI #Year2012 #數學

貪心的每次選擇最接近的兩個數,\(x=min(x-fib_{i-1},fib_i-x)\)

// Author: xiaruize
const int N = 2e5 + 10;

vector<int> vec;
int n;

void solve()
{
	int res = 0;
	cin >> n;
	while (n)
	{
		auto it = upper_bound(ALL(vec), n);
		n = min(n - (*prev(it)), (*it) - n);
		res++;
	}
	cout << res << endl;
}

#ifndef ONLINE_JUDGE
bool end_of_memory_use;
#endif

signed main()
{
	// freopen(".in","r",stdin);
	// freopen(".out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int testcase = 1;
	vec.push_back(1);
	vec.push_back(2);
	while (vec[vec.size() - 1] + vec[vec.size() - 2] <= 1e18)
		vec.push_back(vec[vec.size() - 1] + vec[vec.size() - 2]);
	cin >> testcase;
	while (testcase--)
		solve();
#ifndef ONLINE_JUDGE
	cerr << "Memory use:" << (&end_of_memory_use - &start_of_memory_use) / 1024.0 / 1024.0 << "MiB" << endl;
	cerr << "Time use:" << (double)clock() / CLOCKS_PER_SEC * 1000.0 << "ms" << endl;
#endif
	return 0;
}

相關文章