C. Given Length and Sum of Digits...
一句话题意
分别找出长度为n,每位数字和恰好为m的最小数和最大数,如果找不到输出”-1 -1“
思维
怎么确保构造的数最小/大?
怎么确保数字和恰好为m?
实施
遍历每一位,贪心地选取最大/最小的数,直到接下来的数字不足以贪心
细节
1.没有前导零
2.数字和恰好为m
3.注意边界特判
code
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
if(m==0)
{
if(n==1) puts("0 0");
else puts("-1 -1");
return 0;
}
int m1=m,m2=m;
string s1,s2;
int flag1=0,flag2=0;
for(int j=1;j<=9;j++)
{
if(m1-j<=(n-1)*9)
{
flag1=1;
s1+=(j+'0');
m1-=j;
break;
}
}
for(int j=9;j>=1;j--)
{
if(m2-j>=0)
{
flag2=1;
s2+=(j+'0');
m2-=j;
break;
}
}
if(flag1&&flag2)
{
for(int i=2;i<=n;i++)
{
if(m1==(n-i+1)*9&&flag1)
{
flag1=0;
for(int j=i;j<=n;j++) s1+='9';
}
if(m2==0&&flag2)
{
flag2=0;
for(int j=i;j<=n;j++) s2+='0';
}
if(flag1)
for(int j=0;j<=9;j++)
{
if(m1-j<=(n-i)*9)
{
m1-=j;
s1+=(j+'0');
break;
}
}
if(flag2)
for(int j=9;j>=0;j--)
{
if(m2-j>=0)
{
m2-=j;
s2+=(j+'0');
break;
}
}
}
cout<<s1<<" "<<s2;
}
else puts("-1 -1");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~