CF1250H题解
CF1250H题解
题意
现在你有 ci 个 i(0⩽i⩽9),问你不能拼的最小数是多少。
思路
先看数据范围:0⩽ci⩽105,暴力一看就是不行的!
那我们就换一种想法:
- 若 0 的个数大于等于数字个数最少的个数:首先先设有的数字个数最少的之中最小的数为 i,i 的个数为 cnt,则最小不能拼的数为 cnt+1 个 i(i×10cnt+1+i)。
- 若 0 的个数小于数字个数最少的个数:设有 cnt 个 0,则最小的数为 10cnt+1(输出一个 1,然后输出 cnt+1 个 0)。
总结
- 分类讨论。
- 换行。
- 千万不能直接去算最大的数,绝对要超出数据范围(那可是 10105)。
- 一定要注意初始化。
代码
#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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】