hdu 3183 贪心够了

在搜索HDU RMQ题目时,发现了这道题,有人说是用RMQ,用线段树加贪心的也有,想太多了,实际上贪心够了。

主要思想,i=0 -> n,如果a[i]>a[i+1],a[i]去掉,即前面的数要小于后面的数,代码详解

 

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int main()
 5 {
 6     char b[1010];//输入
 7     int a[1010],i,j,k,n,m;//转化为整数
 8     int c[1010];//保存结果
 9     while(cin>>b>>n)
10     {
11         if(b[0]=='0'&&n==0)
12             break;
13         for(i=0;b[i]!='\0';i++)
14             a[i]=b[i]-'0';//转化为整数
15         m=i;k=0;
16         for(i=0;i<m-1&&n>0;i++)
17         {
18             if(a[i]<=a[i+1])
19             {
20                 c[k++]=a[i];
21             }
22             else
23             {
24                 n--;
25                 while(c[k-1]>a[i+1]&&n>0)//处理相等情况,如 5553444 3,处理第三个5时,往回消除数字
26                 {
27                     k--;n--;
28                 }
29             }
30         }
31         for(;i<m;i++)
32             c[k++]=a[i];
33         for(i=0;i<k-n;i++)//去除前导0
34             if(c[i]!=0)
35                 break;
36         if(i==k-n)//答案为0时
37             cout<<"0";
38         for(;i<k-n;i++)
39             cout<<c[i];
40         cout<<endl;
41     }
42 }
43         
posted @ 2012-07-18 14:44  炎色  阅读(312)  评论(0编辑  收藏  举报