COJ 删除数字
|
试题描述
|
|
输入正整数N和M,在N中删除掉M位,能留下的最大整数是多少?
|
|
输入
|
|
正整数N和M
|
|
输出
|
|
留下的最大整数
|
|
输入示例
|
|
233390323 5
|
|
输出示例
|
|
9323
|
|
其他说明
|
|
1<=N<=10^1000
1<=M<=1000 |
N的长度比较小,胡搞就行了。
那么如果1<=N<=10^1000000呢?
考虑当前最后保留的位置是cur,还要删m个字符,那么下一个要删的区间应是[cur+1,cur+m+1],那么我们要设计一个数据结构快速找到区间最大值。
这显然是个滑动窗口,用单调队列做做就行了(<--WZJ这蒟蒻竟然没看出来写了线段树)。注意这组数据636546796 8要输出9,即如果最后还没删够要输出前n-m个得到的字符。
#include<cstdio>
#include<cctype>
#include<ctime>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
char s[],q[];
int maxv[];
void build(int o,int l,int r) {
if(l==r) maxv[o]=l;
else {
int mid=l+r>>,lc=o<<,rc=lc|;
build(lc,l,mid);build(rc,mid+,r);
if(s[maxv[lc]]>=s[maxv[rc]]) maxv[o]=maxv[lc];
else maxv[o]=maxv[rc];
}
}
int ql,qr;
int query(int o,int l,int r) {
if(ql<=l&&r<=qr) return maxv[o];
int mid=l+r>>,lc=o<<,rc=lc|;
if(qr<=mid) return query(lc,l,mid);
if(ql>mid) return query(rc,mid+,r);
int ans1=query(lc,l,mid),ans2=query(rc,mid+,r);
return s[ans1]>=s[ans2]?ans1:ans2;
}
int main() {
int m,cnt=,t;
scanf("%s%d",s+,&m);t=m;
int n=strlen(s+),cur=;
build(,,n);
while(cur<n) {
ql=cur+;qr=min(cur+m+,n);
int next=query(,,n);
m-=next-cur-;cur=next;
q[++cnt]=s[cur];if(m<=) break;
}
if(m) rep(i,,n-t) putchar(q[i]);
else {
printf("%s",q+);
rep(i,cur+,n) putchar(s[i]);
}
return ;
}
COJ 删除数字的更多相关文章
- T2988 删除数字【状压Dp+前缀和优化】
Online Judge:从Topcoder搬过来,具体哪一题不清楚 Label:状压Dp+前缀和优化 题目描述 给定两个数A和N,形成一个长度为N+1的序列,(A,A+1,A+2,...,A+N-1 ...
- lintcode - 删除数字
class Solution { public: /* * @param A: A positive integer which has N digits, A is a string * @para ...
- react之redux增加删除数字
比如在页面中添加和删除‘222’ action.js export const ADD= 'ADD'; export const RED='RED'; export const add=(str)=& ...
- 【编程题目】n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始
第 18 题(数组):题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始,每次从这个圆圈中删除第 m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后, ...
- Oracle删除指定用户下所有对象
--.sql脚本 --唯一注意的是下面的d:\dropuserobj.sql为操作的.sql; --用于删除当前用户的所有对象 --use for drop all objects in curren ...
- IT公司100题-18-圆圈中最后剩下的数字
问题描述: n个数字(下标为0, 1, …, n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(当前数字从1开始计数).当一个数字被删除后,从被删除数字的下一个数字开始计数,继续删除 ...
- 转: 数字证书原理 https 完整过程解析
点评: 讲的非常的详细与全面,值得一看. 转: http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 文中首先解释了加密解 ...
- 基于visual Studio2013解决面试题之1001去除数字
题目
- [区块链|非对称加密] 对数字证书(CA认证)原理的回顾
摘要:文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的 ...
随机推荐
- 【GoLang】GoLang GOPATH 工程管理 最佳实践
参考资料: MAC下 Intellij IDEA GO语言插件安装及简单案例:http://blog.csdn.net/fenglailea/article/details/53054502 关于wi ...
- 【OpenStack】OpenStack系列3之Swift详解
Swift安装部署(与keystone依赖包有冲突,需要安装不同版本eventlet) 参考:http://www.server110.com/openstack/201402/6662.html h ...
- 把.pvr.ccz文件转换成png
我用的是一个万能转换法,原理是先用CCSprite加载.pvr.ccz,然后把它绘制到一个CCRenderTexture上,然后再保存到文件里.这方法其实不只.pvr.ccz文件,其他所有能被coco ...
- iOS 利用self.navigationItem.backBarButtonItem修改后退按钮文字
@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem; // Bar button item to use for the ba ...
- DP:Cow Bowling(POJ 3176)
北大教你怎么打保龄球 题目很简单的,我就不翻译了,简单来说就是储存每一行的总数,类似于状态压缩 #include <stdio.h> #include <stdlib.h> # ...
- Js数组里删除指定的元素(不是指定的位置)
转载自:http://my.oschina.net/zh119893/blog/265964 之前一直是做后端的,从来也没有写过js,但是却一直想学学,也只是基于兴趣而已!现在到了这个公司,确实大量的 ...
- google maps js v3 api教程(2) -- 在地图上添加标记
原文链接 google maps javascript官方文档:https://developers.google.com/maps/documentation/javascript/ 我们在创建地图 ...
- Java操作Session与Cookie
1,Java操作Session Java操作Session非常简单,步骤如下 1.1,在servlet中通过request获取session HttpSession session = request ...
- MFC中添加消息响应函数
转自:http://blog.csdn.net/eddy_liu/article/details/8474677 目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构.这种程序框架与简单 ...
- WIN7里为什么没有TELNET,怎么添加
打开控制面板,打开程序和功能,看到左边有个“打开或关闭Windows功能 ,打开找到telnet客户端,把这2项都勾选上,然后确定就可以了 注意,如果只要telnet别人的话,就选telnet客户端. ...