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