欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jzoj1273-袁绍的刁难【进制转换】

程序员文章站 2024-03-17 13:21:52
...

正题


题目大意

ii个武将价值为3i13^{i-1},求第kk大的选择武将价值之和


解题思路

因为i=0n13i<3n\sum_{i=0}^{n-1}3^i<3^{n}

所以其实答案就是kk转成二进制之后强行转成3进制的值。


codecode

#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
ll n,k,z,ans,w;
int main()
{
	//freopen("recruitment.in","r",stdin);
	//freopen("recruitment.out","w",stdout);
	scanf("%lld",&n);
	while(n--){
		scanf("%lld",&k);
		z=1;ans=0;w=0;
		while(k){
			if(z*2>k){
				k-=z;
				ans+=pow(3,w);
				z=1;w=0;
			}
			else z*=2,w++;
		}
		printf("%lld\n",ans);
	}
}