首页 > 其他分享 >Codeforces Round 690 (Div. 3) C. Unique Number

Codeforces Round 690 (Div. 3) C. Unique Number

时间:2023-10-13 15:24:01浏览次数:36  
标签:std 690 cur digt Number Codeforces while 位数 ans

给一个正整数 \(x\) ,需要构造一个最小的正整数 \(n\) 使得 \(\sum digt(n) = x\) ,并且 \(\forall i \neq j, digt(n)_i \neq digt(n)_j\) 。

首先观察到 \(0\) 没有贡献,且会增加位数,所以不能有 \(0\) 。

由于每个数位只能出现一次,显然合法的 \(x\) 范围为 \([0, \sum_{i=1}^{9} i]\) ,又 \(x \geq 1\) 。于是合法范围为 \([1, 45]\) 。这个范围内的数一定可以被若干个数位组合。

需要构造最小的 \(n\) 需要考虑两个显然的条件:

  • 位数尽可能少。
    • 于是尽量使用更大的数字
  • 位数相同的情况下高位权值尽可能小
    • 于是更大的数字在更低位

于是从低位到高位用最大的数字贪心填充即可。

view
#include <bits/stdc++.h>
typedef long long ll;
void solve(){
	int n; std::cin >> n;
	if (n > 45) std::cout << -1 << "\n";
	else {
		std::vector<int> ans;
		int cur = 9;
		while (n) {
			while (n - cur < 0) cur -= 1;
			n -= cur;
			ans.push_back(cur);
			cur -= 1;
		}
		std::reverse(ans.begin(), ans.end());
		for (auto x : ans) std::cout << x;
		std::cout << "\n";
	}
}
int main() {
	int _ = 1; std::cin >> _;
	while (_--) {solve();}
	return 0;
}

标签:std,690,cur,digt,Number,Codeforces,while,位数,ans
From: https://www.cnblogs.com/zsxuan/p/17762169.html

相关文章

  • Codeforces Round 695 (Div. 2) A. Wizard of Orz
    有\(n\)个数位板摆放成一条直线,每个数位板可以显示\(0\sim9\)的数字。最开始数位板显示的是\(0\)。每秒数位板上的数字都会加\(1\),\(9\)的下一个数字是\(0\)。当一个数位板被暂停,它上面的数字将会定格在当前秒。你必须对某个数位板执行一次暂停,在任意可选的时刻。......
  • Educational Codeforces Round 156 (Rated for Div. 2) A-E
    A题签到题分余1余2余0讨论 #include<bits/stdc++.h>usingnamespacestd;#definemaxn400100#defineintlonglongintread(){intans=0,f=1;charch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}......
  • 微信支付 Verify the signature and get the Wechatpay certificate corresponding to
    1.先获取商户证书文件这块叫商户证书需要和下面的支付证书名字区分在微信开放平台里面下载商户证书,用apiclient_cert.pem取获取'商户证书的序列号'证书查看  2.需要下载一个jar,生成微信证书时候用Releases·wechatpay-apiv3/CertificateDownloader·GitHub  3......
  • Codeforces Round 694 (Div. 2) A. Strange Partition
    给一个长为\(n\)的数组\(a\)和一个正整数\(x\)。你可以执行以下操作任意次:用两个相邻元素的和替换这两个元素。如\([\cdots,a_i,a_{i+1},\cdots]\rightarrow[\cdots,a_i+a_{i+1},\cdots]\)。一个数组\(b=[b_1,\cdots,b_k]\)的美丽值定义为\(\sum_{i=1}^{k}......
  • Codeforces Round 697 (Div. 3) A. Odd Divisor
    给一个正整数\(n\),判断\(n\)是否存在一个\(>1\)的奇数因子。只要\(n\)的唯一分解下存在除\(2\)以外的质因子,则\(n\)存在\(>1\)的奇数因子。于是\(n\neqlowbit(n)\)则\(n\)存在奇数因子。(应用了\(2^k=lowbit(2^k)\)的性质)view#include<bits/stdc+......
  • struct.error: 'H' format requires 0 <= number <= 65535
    全部代码如下:frompymodbus.clientimportModbusTcpClient#避坑:write_registers和write_register函数差一个s。多一个s的参数用整型列表,没有的只能用整型defsplit_float_to_integer_and_fraction_parts(number):"""将浮点数拆分为整数部分和小数部分的函数......
  • Codeforces Round 703 (Div. 2) A. Shifting Stacks
    给定\(n\)个石堆,第\(i\)个石堆高为\(h_i\)并且代表这堆石块的个数。在一次操作中你可以将第\(i\)堆中的一块石块移动(需要存在石块)到\(i+1\)堆。询问是否可以使石堆的高度严格递增。显然贪心地让第\(1\)堆的高度为\(0\)。然后线性模拟使得第\(1\simn-1\)的......
  • Codeforces Round 899 (Div. 2)
    目录写在前面ABCDE1E2写在最后写在前面比赛地址:https://codeforces.com/contest/1882。你知道我要在这里放一首由日本女歌手演唱的歌曲:一个队友去医院一个队友军训,堂堂单刷!感觉开场5h太浪费了于是找了场div2,然后C不会做卡了1h,妈的。看完题解立马会了,我果然是没脑子选......
  • CodeForces 1882E2 Two Permutations (Hard Version)
    洛谷传送门CF传送门如何评价,模拟赛搬了一道,前一天晚上代码写了一半的题。考虑如何让操作次数最小。发现直接做太困难了。根本原因是,一次操作对序列的影响太大了。考虑做一些转化,减少一次操作对序列的影响。仍然先考虑一个排列怎么做。不知道为什么可以想到在排列前面添加特......
  • Codeforces Round 834 (Div. 3)
    CodeforcesRound834(Div.3) A-Yes-Yes?思路:判断每种情况即可#include<bits/stdc++.h>usingnamespacestd;//#defineintlonglong//#defineint__int128#definedoublelongdoubletypedefpair<int,int>PII;typedefpair<string,int>PSI;typed......