zoukankan      html  css  js  c++  java
  • 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$ 次,模拟是不会超时的。

    代码

    C++

    #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();
    }

    Python3

    for _ in range(int(input())):
        a, b, n = map(int, input().split())
        cnt = 0
        while max(a, b) <= n:
            a, b = a + b, max(a, b)
            cnt += 1
        print(cnt)
  • 相关阅读:
    springboot对JPA的支持
    Hibernate-什么是orm思想
    利用Struts拦截器完成文件上传功能
    Struts2的CRUD
    struts2的初步认识
    Maven搭建
    java虚拟机
    Map集合
    Set集合(TreeSet)
    Set集合的
  • 原文地址:https://www.cnblogs.com/Kanoon/p/13161971.html
Copyright © 2011-2022 走看看