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 long
using 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 long
using 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;
}