2 条题解

  • 0
    @ 2026-1-28 14:26:35

    特别考虑一下m是1的情况,其他的暴力枚举即可,复杂度是log的,想要再高效一点就用log去算要几次,但是我懒得算。 赛时记得能过就行,但是平常练习记得考虑考虑怎么写,以防比赛真要你写

    #include<bits/stdc++.h>
    using namespace std;
    
    void sol(){
        long long n, m; cin >> n >> m;
        if(m == 1 || m >= n)  cout << 1 << endl;
        else{
            long long t = m;
            int res = 1;
            while(t * m < n)
                t *= m, res ++;
            if(n - t > t * m - n)
                res ++;
            cout << res << endl;
        }
    }
    
    int main(){
        int t; cin >> t;
        while(t --)
            sol();
        return 0;
    }
    
    • 0
      @ 2025-12-16 14:26:58

      模拟

      如果 m=1m=1,那么无论提升多少次,温度都是 11 ,所以只需要升温 11 次就行。

      如果是其他温度,那么升温次数肯定不会超过 3030 ,所以接下来按题目描述模拟即可,但是要注意别爆精度。

      时间复杂度 O(logn)O(logn)

      #include<bits/stdc++.h>
      
      using namespace std;
      
      int main(){
          int T = 1;
          cin >> T;
          while(T--){
              int n, m;
              cin >> n >> m;
              if(m == 1){
                  cout << 1 << endl;
                  continue;
              }
              auto ans = pair(1ll * abs(n - m), 1);
              auto t = 1ll * m;
              int k = 1;
              while(1){
                  t *= m;
                  k++;
                  ans = min(ans, {abs(t - n), k});
                  if(t >= n) break;
              }
              cout << ans.second << endl;
          }
      }
      
      
      • 1

      信息

      ID
      159
      时间
      1000ms
      内存
      256MiB
      难度
      4
      标签
      递交数
      125
      已通过
      17
      上传者