HDUOJ 3183 A Magic Lamp(RMQ)
程序员文章站
2024-03-19 19:13:38
...
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183
solution:对一个数,只删除一个数字,使改变后的数成为最小的数字,那么我们应该从头开始找一个连续的非递减数字序列,把这个序列中的最后一个数删除,就可以得到这个要求的数了。
#include <bits/stdc++.h>
#define MAX 1003
using namespace std;
int main()
{
int m,len,i,c;
char ans[MAX],s[MAX];
while(~scanf("%s %d",s,&m))
{
len=strlen(s);
c=0;
ans[c++]=s[0];
for(i=1;i<len;i++)
{
if(c-1<0||ans[c-1]<=s[i]||m==0) ans[c++]=s[i];
else{
while(m>0&&c>0&&ans[c-1]>s[i])
{
c--;
m--;
}
ans[c++]=s[i];
}
}
if(m>0) c-=m;
ans[c]='\0';
i=0;
while(i<c)
{
if(ans[i]=='0') i++;
else break;
}
if(i==c) printf("0\n");
else printf("%s\n",ans+i);
}
return 0;
}
上一篇: SSM框架------删除多条数据
下一篇: 安装anaconda