P11059 [入门赛 #27] 数字 (Hard Ver.)题解
Solution
先读题:
在给定x的位数
我们假设
(当
此时对于
在
或 时无需构造,属于情况一。
时需构造,属于情况二,且可以简单证明必定有一个合法 使 。
做法:
对于情况二,容易想到一种贪心解法,此时的模数
- 在最高位先放数字1维持
合法并是 减1。 - 再从最低位开始放数字,当
时该位放9且让 减去9,当 且不为最高位时使该位为p,接着走向较高的下一位。 - 放置过程中若
,那么说明所有数字放完,退出。 - 若在最高位仍有
,那么时最高位为 (在步骤一中最高位已经放了1,再加上此时的 )并退出。
复杂度分析:
因为按位放数字,有
Code
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+1;
int n,p,a[N],idx=1;
int main() {
cin>>n>>p;
if(n*9<p){
putchar('1');
for(int i=1;i<n;++i)putchar('0');
}else{
p--;
while(idx!=n&&p){
if(p>=10)a[idx]=9;
else a[idx]=p;
p-=a[idx];
++idx;
}
a[n]=++p;
for(int i=n;i>=1;--i)cout<<a[i];
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架