[COCI11-12 #4]删数游戏(贪心+数据结构)

题目描述

题目描述

给出一个N位数字串,删除任意K位,使剩下的数最大.。

输入

第1行:2个整数N和K(1<=K<=N<=500000)
第2行:N个数字(可能为0)

输出

第1行:1个可行到的最大的数

样例输入

10 4
4177252841

样例输出

775841

题解

刚看到题目时感觉是一道水题…然后迅速交上去T掉了…
仔细看看数据范围,发现常规做法已经达到了O(kn2)O(kn2)的复杂度了,显然是会超时的。
这时候就需要数据结构的优化了~
我们知道之前要删去一个数的时候要先删去一个数,再将前面的数一个一个往前移。有没有方法使它不需要移动呢。显然,我们可以用栈这个数据结构啦~
最后只需要从前往后加入栈内,遇到一个数与前面的数不保持递增状态时就将栈内的元素删去即可。

实现

#include
#include
#include
#include
#include
using namespace std;
char b[500005],a[500005];//数组模拟栈
int n,k,task=1,t1;
int main()
{
    scanf("%d%d",&n,&k);
    scanf("%s",a);
    b[1]=a[0];
    int kp=1;
    while(kpwhile(task>0&&a[kp]>b[task]&&t1for(int i=1;i<=n-k;i++)printf("%c",b[i]);
}

转载于:https://www.cnblogs.com/Panda-hu/p/9338309.html

你可能感兴趣的:([COCI11-12 #4]删数游戏(贪心+数据结构))