keks (删数问题)
来源:互联网 发布:威盾软件 编辑:程序博客网 时间:2024/06/16 07:06
问题 K: keks
时间限制: 1 Sec 内存限制: 128 MB题目描述
给出一个n位数,要求删掉其中k位数字,使得剩下的数字组成的数尽量大。
输入
第1行:两个正整数n, k(1 <= k < n <= 500,000)。
第2行:一个n位正整数(无前导0)。
第2行:一个n位正整数(无前导0)。
输出
输出一行,一个正整数,表示剩下的数的最大值。
样例输入
4 2
1924
样例输出
94
分析:
题目还是相当经典的 要想使删数结束后留下的数字最大 那么我们就需要尽可能的使剩下的数字呈降序的形式也就时说我们每次删掉第一个递增得数字就好了 但是数据量有点大 暴力会T 优化一下 每次删掉数字前递减的就ok 了
AC代码:
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <vector>#include <stack>#include <queue>#include <map>#include <set>#include<list>#include <bitset>#include <climits>#include <algorithm>#define gcd(a,b) __gcd(a,b)#define mset(a,n) memset(a,n,sizeof(a))#define FINfreopen("input.txt","r",stdin)#define FOUT freopen("output.txt","w",stdout)typedef long long LL;const LL mod=1e9+7;const int INF=0x3f3f3f3f;const double PI=acos(-1.0);using namespace std;string a;int vis[500005];int main (){ int n,k; memset(vis,0,sizeof(vis)); while (cin>>n>>k){ cin>>a; int l=0,r=1; while (k&&r<n){ while (k&&l>=0&&a[r]>a[l]){// 删掉r之前的降序的数 if (vis[l]) l--; else vis[l]=1,k--; } l=r;r++; } r--; while (k&&r>=0){// 序列降序后从后向前删 if(!vis[r]) vis[r]=1,k--; r--; } int flag=0; for (int i=0;i<n;i++) if (!vis[i]) cout<<a[i],flag=1; if (!flag) cout<<"0"; putchar('\n'); } return 0;}
阅读全文
0 0
- keks (删数问题)
- CF keks(单调队列)
- 中石油 4509 keks(贪心)
- KEKS--------单调栈
- 删数问题(贪心)
- 删数问题(贪心)
- 删数问题(贪心)
- 删数问题(贪心问题)
- SDUT--枚举(删数问题)
- 最小新整数(删数问题)
- 删数问题(C语言实现)
- 删数问题(山东理工2072)
- 算法:(贪心算法)--删数问题
- 删数问题
- 删数问题
- 1298 删数问题
- 删数问题
- 【贪心】删数问题
- 微信小程序学习笔记 2.3.1 视图与渲染
- NPOI之Excel——合并单元格、设置样式、输入公式
- C语言读写mysql
- Servlet工作原理解析
- 99乘法表1
- keks (删数问题)
- GridView+无线轮播
- 在tensorflow环境下使用skimage库
- 联发科编程大赛_第三题最大序列和
- mysql5.7数据库删库失败
- 对象数值的特定位置的插入方式
- 轮播图(一)原生js
- 99乘法表2
- markdown使用小技巧