欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HDUOJ 3183 A Magic Lamp(RMQ)

程序员文章站 2024-03-19 19:13:38
...

HDUOJ 3183 A Magic Lamp(RMQ)
原题链接: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;
}
相关标签: RMQ