老师在黑板上写了一个不超过 500 位的整数 n(1≤n<10500),要求同学们擦掉其中任意 k 个数字,剩余数字的顺序不变,希望得到的数最大。 例如:n = 69134,k = 2,从 69134 中擦掉 2 个数字;从左往右,将第一个位置的 6 和第三个位置的1 擦掉,变成的新数 934 是最大的。 输入描述: 输入两个整数 n 和 k(1≤n<10500,0≤k<n 的位数),整数之间以一个空格隔开 输出描述: 输出一个整数,表示擦掉 k 个数字后,得到的最大数 样例输入: 69134 2 样例输出: 934

正确答案:删k位求最大数,单调栈贪心:栈顶<当前数则弹出删去:\ns,k=input().split();k=int(k);st=[]\nfor ch in s:\n while k>0 and st and st[-1]<ch:st.pop();k-=1\n st.append(ch)\nwhile k>0:st.pop();k-=1\nprint(int(''.join(st)))
试卷来源:202312(第15届)蓝桥杯Python编程青少组(选拔赛)真题