[COCI11-12 4#]删数游戏(版本2)
2017-12-08 13:45
162 查看
题目描述
题目描述
给出一个N位数字串,删除任意K位,使剩下的数最大.。输入
第1行:2个整数N和K(1<=K<=N<=500000)第2行:N个数字(可能为0)
输出
第1行:1个可行到的最大的数样例输入
10 44177252841
样例输出
775841题解
刚看到题目时感觉是一道水题…然后迅速交上去T掉了…仔细看看数据范围,发现常规做法已经达到了O(kn2)的复杂度了,显然是会超时的。
这时候就需要数据结构的优化了~
我们知道之前要删去一个数的时候要先删去一个数,再将前面的数一个一个往前移。有没有方法使它不需要移动呢。显然,我们可以用栈这个数据结构啦~
最后只需要从前往后加入栈内,遇到一个数与前面的数不保持递增状态时就将栈内的元素删去即可。
实现
#include<algorithm> #include<iostream> #include<cstring> #include<climits> #include<cstdio> 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(kp<n) { while(task>0&&a[kp]>b[task]&&t1<k)task--,t1++; b[++task]=a[kp++]; } for(int i=1;i<=n-k;i++)printf("%c",b[i]); }
相关文章推荐
- 24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1)
- Linux从低版本向高版本平滑升级(Fedora 11到Fedora 12为例)
- 编写函数模拟掷骰子的游戏(两个骰子)。第一次掷的时候,如果点数之和为7或11则获胜;如果点数之和为2、3或12则落败;其他情况下的点数之和称为“目标”,游戏继续。在后续的投掷中,如果玩家再次掷出“目标
- 【COCI11-12 #5】覆盖字符串
- CCF-2017-12-游戏
- 使用Box2D制作AS3游戏——2.1a版本——Hello World Box2D
- 剑指offer--数据结构之二叉树(1、4、6、11、12、27、48、50、60)
- SPSS Clementines 预测分析模型----啤酒+尿片故事的实现机理(使用11版本实现)
- atitit.Oracle 9 10 11 12新特性attilax总结
- 《悬挂小人游戏-版本1.0》
- cocos2d-x手机游戏(IOS版本)接入分享shareSDK(新浪微博和微信分享)记录
- DirectX 11游戏编程学习笔记之5: 第4章Direct3D Initialization(Direct3D初始化)
- 重新学习COCOs2D-X版本2.2.3开始---第一篇引擎的游戏入口
- war3 win8系统 在11对战平台 切屏后 无法切回游戏
- 《序列》游戏攻略【07~12】
- mysql 在 1,11,12,3,13 中选出id的值
- 字符版本贪吃蛇游戏设计及算法
- 游戏开发经济数值设计(11)
- 【Cocos2d-X(2.x) 游戏开发系列之三】最新版本cocos2d-2.0-x-2.0.2使用资源加载策略
- 下载jdk历史版本的方法,jdk1.5.0_12验证通过