2 条题解
-
0
特别考虑一下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
模拟
如果 ,那么无论提升多少次,温度都是 ,所以只需要升温 次就行。
如果是其他温度,那么升温次数肯定不会超过 ,所以接下来按题目描述模拟即可,但是要注意别爆精度。
时间复杂度 。
#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
- 上传者