本人有一个自认为还行的思路,求指教
查看原帖
本人有一个自认为还行的思路,求指教
902704
wjx38223楼主2023/8/23 10:28

我想的是,把每一次运算的 x 都当作自己本身就是3的倍数。这样的话如果要除以3就必须加上3,抽象化这一个过程,也就是每次都让k减去3,单独开一个数,记录每一次多加了多少(因为把所有的数都当作离他最近比他小3的倍数来算了),最后单独遍历一下多算的部分,超时40pts,求大佬指教

#include<bits/stdc++.h>
using namespace std;
long long x, k;
int main() {
	ios::sync_with_stdio(0);
	cin >> x >> k;
	long long ano = 0;
	while(k-3>0) {
		k=k-3;
		ano+=x%3;
		x=x/3+1;
		//cout << x;
		//cout << k;
	}
	ano+=k; 
	for(int i = 1; i<=ano; i++){
		x++;
		if(x%3==0){
			x/=3;
		}
	}
	cout << x;
	return 0;
}
2023/8/23 10:28
加载中...