http://acm.sgu.ru/problem.php?contest=0&problem=296

水题,贪心。每次从最高位开始按非上升顺序搜索,遇到上升的则删除或者是到达尾部删除尾部。
例如,19192,要删去2位,则先删去第一个1,然后再删除第二个1.

#include <stdio.h>
#include 
<stdbool.h>
#include 
<string.h>

int main(void) {
    
char s[1002];
    
int k;
    scanf (
"%s%d", s, &k);
    
int i, j, pre;
    
int len = strlen(s);
    
for (i = 0; i < k; ++i) {
        
bool del = false;
        j 
= 0;
        
while (s[j]<'0') {
            
++j;
        }
        pre 
= j++;
        
for (; j < len; ++j) {
            
if (s[j] < '0') {
                
continue;
            }
            
if (s[pre] < s[j]) {
                s[pre] 
= 1;
                del 
= true;
                
break;
            } 
else {
                pre 
= j;
            }
        }
        
if (!del) {
            s[pre] 
= 1;
        }
    }
    
for (i = 0; i < len; ++i) {
        
if (s[i] > 1) {
            printf (
"%c", s[i]);
        }
    }
    printf (
"\n");
    
return 0;
}



posted on 2010-05-07 17:19 Willing 阅读(372) 评论(0)  编辑 收藏 引用 所属分类: ACM

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理