Codeforces Global Round 8 A. C+=(贪心)
Posted kanoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Global Round 8 A. C+=(贪心)相关的知识,希望对你有一定的参考价值。
题目链接:https://codeforces.com/contest/1368/problem/A
题意
给出 $a,b$,只可以使用 ‘+=‘ 运算符,问至少要使用多少次使得 $a$ 或 $b$ 大于 $n$ 。($1 le a,b le n le 10^9$)
题解
每次让较小的数加上较大的数。
证明
正确性
每次使用 ‘+=‘ 运算符,不论是 a+=b 还是 b+=a,得到的和一定为 $a + b$,只是将这个和赋给谁的问题,当然是赋给较小的数。
时间复杂度
每次 ‘+=‘ 可以视为给一个数乘以 $2$,所以这样的操作至多执行 $log n$ 次,模拟是不会超时的。
代码
#include <bits/stdc++.h> using namespace std; void solve() { int a, b, n; cin >> a >> b >> n; int cnt = 0; while (a <= n and b <= n) { if (a > b) swap(a, b); a += b; ++cnt; } cout << cnt << " "; } int main() { int t; cin >> t; while (t--) solve(); }
以上是关于Codeforces Global Round 8 A. C+=(贪心)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Global Round 8 A. C+=(贪心)
Codeforces Global Round 8 E. Ski Accidents
Codeforces Global Round 8 E - Ski Accidents 拓扑
Codeforces Global Round 8 D. AND, OR and square sum(位运算)
Codeforces Global Round 8 D - AND, OR and square sum 尽量往大的数字上移动