Erasing and Winning UVA

来源:互联网 发布:dior homme男装知乎 编辑:程序博客网 时间:2024/05/18 01:14

关键在于思维,逐步读入这个数,每次读入一位之后,如果之前已经删除的数字的位数没有达到D,并且已经存储了之前输入的部分的数字,那么就将当前输入的数字和之前存储的数字进行比较,并且逐步删除那些比当前的数字小的数字,这一轮操作结束之后,就判断当前已经插入的数字是否已经到了上限(也就是N-D),如果没有到达上限,那么就将当前的数字插入,最后循环结束,输出最终的结果即可,具体实现见如下代码:

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>#include<functional>using namespace std;const int maxn = 100000 + 10;char data[maxn];int main(){int N, D;while (cin >> N >> D){if (N == 0 && D == 0) break;int ind = 0;for (int i = 0; i < N; i++){char t;cin >> t;while (ind > 0 && i - ind < D&&data[ind] < t)ind--;if (ind + D < N) data[++ind] = t;}for (int i = 1; i <= N - D; i++)cout << data[i];cout << endl;}return 0;}

原创粉丝点击