Warning: session_start(): open(/tmp/sess_2a23a145fb389bea10fc8f90e589f309, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239

Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/actions.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/lib/tpl/dokuwiki/main.php on line 12
2020-2021:teams:legal_string:jxm2001:contest:牛客练习赛87 [CVBB ACM Team]

用户工具

站点工具


2020-2021:teams:legal_string:jxm2001:contest:牛客练习赛87

牛客练习赛85

C - 牛老板

题意

用最少的 $6^k,9^k$ 表示 $n$。$(1\le n\le 10^{12})$

题解

预处理 $n\lt 10^6$ 的答案,然后启发式搜索。

查看代码

查看代码

const LL MAXV=1e12+5,MAXN=1e6;
vector<LL> vec;
LL dp[MAXN];
void Init(){
	vec.push_back(1);
	LL base=6;
	while(base<MAXV){
		vec.push_back(base);
		base*=6;
	}
	base=9;
	while(base<MAXV){
		vec.push_back(base);
		base*=9;
	}
	sort(vec.begin(),vec.end());
	_for(i,1,MAXN){
		dp[i]=i;
		for(int v:vec){
			if(v<=i)
			dp[i]=min(dp[i],dp[i-v]+1);
			else
			break;
		}
	}
}
LL ans;
void dfs(LL x,int pos,int step){
	if(x<MAXN){
		ans=min(ans,dp[x]+step);
		return;
	}
	if(pos==0){
		ans=min(ans,x+step);
		return;
	}
	LL m=x/vec[pos];
	for(int i=m;i>=0;i--){
		if(m+step>=ans)return;
		dfs(x-i*vec[pos],pos-1,step+i);
	}
}
int main()
{
	Init();
	int T=read_int();
	while(T--){
		LL x=read_LL();
		ans=1e9;
		dfs(x,vec.size()-1,0);
		enter(ans);
	}
	return 0;
}

D - 小G的排列-加强版

题意

题解

2020-2021/teams/legal_string/jxm2001/contest/牛客练习赛87.1629538183.txt.gz · 最后更改: 2021/08/21 17:29 由 jxm2001