【CodeForces训练记录】Codeforces Round 976 (Div. 2) and Divide By Zero 9.0

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;
}
posted @ 2024-09-30 01:20  MNNUACM_2024ZY  阅读(102)  评论(1编辑  收藏  举报