UVa 11491 - Erasing and Winning
2021-02-18 23:17
阅读:344
链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2486
题意:
你是一个电视节目的获奖嘉宾。主持人在黑板上写出一个n位整数(不以0开头),邀请你删除其中的d个数字,
剩下的整数便是你所得到的奖品的价值。当然,你希望这个奖品价值尽量大。1≤d<n≤1e5。
分析:
对于一个数abcd,设a
若不删除a,则这个数是以a开头的,若删除了a,则这个数是以b开头的。
可见前者比后者小,故必然要删除a,其他数位的情况类似。
由于添加和删除都在表的最右端,用一个栈来实现即可。
代码:
1 #include2 3 const int UP = 1e5 + 5; 4 char s[UP], stk[UP]; //栈 5 6 int main(){ 7 int n, d; 8 while(scanf("%d%d", &n, &d) && n){ 9 scanf("%s", s); 10 11 int top = 0; //栈顶指针 12 for(int i = 0; i ){ 13 while(d && top && stk[top] ; 14 stk[++top] = s[i]; 15 } 16 top -= d; 17 stk[++top] = ‘\0‘; 18 printf("%s\n", stk + 1); 19 } 20 return 0; 21 }
上一篇:c#面向对象4
文章来自:搜素材网的编程语言模块,转载请注明文章出处。
文章标题:UVa 11491 - Erasing and Winning
文章链接:http://soscw.com/index.php/essay/57254.html
文章标题:UVa 11491 - Erasing and Winning
文章链接:http://soscw.com/index.php/essay/57254.html
评论
亲,登录后才可以留言!