CF1250H题解

CF1250H题解

题意

现在你有 cii0i9),问你不能拼的最小数是多少。

思路

先看数据范围:0ci105,暴力一看就是不行的!

那我们就换一种想法:

  1. 0 的个数大于等于数字个数最少的个数:首先先设有的数字个数最少的之中最小的数为 ii 的个数为 cnt,则最小不能拼的数为 cnt+1ii×10cnt+1+i)。
  2. 0 的个数小于数字个数最少的个数:设有 cnt0,则最小的数为 10cnt+1(输出一个 1,然后输出 cnt+10)。

总结

  1. 分类讨论。
  2. 换行。
  3. 千万不能直接去算最大的数,绝对要超出数据范围(那可是 10105)。
  4. 一定要注意初始化。

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int T;//T组数据。
int c[15],minn,cnt; 
//minn记录除0以外有的个数最少的最小数。
//cnt记录这个最小数的出现个数。 
int main(){
	scanf("%d",&T);
	while(T--){
		minn=2147483647;//附上最大值。(INT_MAX) 
		for(int i=0; i<=9; i++){
			scanf("%d",&c[i]);
			if(i!=0&&minn>c[i]){//记录。 
				minn=c[i];
				cnt=i;
			}
			//"minn>c[i]"不可以写>=因为是要取有的个数最少的最小数,加了'='则变成了求有的个数最少的最大数。	 
		}
		if(minn>c[0]){//特殊情况:0的个数最少。 
			printf("1");
			for(int i=1; i<=c[0]+1; i++) printf("0"); 
		} 
		else for(int i=1; i<=minn+1; i++) printf("%d",cnt);//记得cnt要加1
		printf("\n");//一定要记得换行! 
	}
	return 0;
}
posted @   naroto2022  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
不相信人咬不到肚脐的,咬破肚脐去死如何?