https://codeforces.com/contest/2020
赛后反思
没有捏,尽力了
A题
给定 \(n,k\) 每次都可以将 \(n\) 减去 \(k\) 的任意次方,想要次数最少,我们显然使用贪心,每次尽可能减去最大,但我们倒过来想,\(k^{x_1}+k^{x_2}+k^{x_3} \cdots = n\) 这东东不就是将 \(n\) 转成 \(k\) 进制吗,对 \(k\) 进制的每一位求个和,注意一下 \(k = 1\) 死循环特判即可
#include <bits/stdc++.h>
#define int long longusing namespace std;void solve(){int n,k; cin>>n>>k;if(k == 1){cout<<n<<endl;return;}int ans = 0;while(n){ans+=n%k;n/=k;}cout<<ans<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}
B题
玄学做法???我们手玩样例发现跟质数好像有点关系??我们瞪眼观察样例注意到 \(ans-\sqrt{ans} = x\),所以我们直接大力循环判断即可,循环的开始条件为 \(n + \sqrt{n}\)
这题我也不是很大明白,但是奇怪的过了 pretest
#include <bits/stdc++.h>
#define int long longusing namespace std;void solve(){int x; cin>>x;for(int i=(x+sqrt(x))-100;;i++){if(i - (int)sqrt(i) == x){cout<<i<<endl;break;}}
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}