HDU 3183:A Magic Lamp(RMQ)
http://acm.hdu.edu.cn/showproblem.php?pid=3183
题意:给出一个数,可以删除掉其中m个字符,要使得最后的数字最小,输出最后的数字(忽略前导零)。
思路:设数的长度为n,那么我们要删除其中m个最大的字符,可以转化为我们保留其中的n-m个最小的字符。对于第一个数,它存在的区间必定在[1,m+1]里面,因为我们要保证后面[m+2,n]区间有n-m-1个字符。当找到第一个数的下标为tmp的时候,第二个数的区间就是[tmp+1,m+2]……以此类推,直到找到最后。
这里我们就可以用RMQ来处理了。dp数组保存的信息是下标。
注意最后可能有前导零,要去除掉前导零。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
#define N 50010
char s[];
int dp[][];
int ans[];
int n, m; void Init() {
int k = (int)(log(n) / log());
for(int i = ; i <= n; i++) dp[i][] = i;
for(int j = ; j <= k; j++)
for(int i = ; i + ( << j) - <= n; i++)
if(s[dp[i][j-]] <= s[dp[i+(<<(j-))][j-]]) dp[i][j] = dp[i][j-];
else dp[i][j] = dp[i+(<<(j-))][j-];
} int Query(int l, int r) {
int k = (int)(log(r - l + ) / log());
return s[dp[l][k]] <= s[dp[r-(<<k)+][k]] ? dp[l][k] : dp[r-(<<k)+][k];
} int main() {
while(~scanf("%s%d", s + , &m)) {
n = strlen(s + );
Init();
int cnt = , tmp = ;
for(int i = ; i <= n - m; i++) {
tmp = Query(tmp, m + i);
ans[++cnt] = s[tmp++] - '';
}
for(tmp = ; tmp <= cnt; tmp++) if(ans[tmp] != ) break;
if(tmp > cnt) puts("");
else { for(; tmp <= cnt; tmp++) printf("%d", ans[tmp]); puts(""); }
}
return ;
}
HDU 3183:A Magic Lamp(RMQ)的更多相关文章
- hdu 3183 A Magic Lamp(RMQ)
A Magic Lamp Time Limi ...
- HDU 3182 ——A Magic Lamp(思维)
Description Kiki likes traveling. One day she finds a magic lamp, unfortunately the genie in the lam ...
- hdoj--3183--A Magic Lamp(贪心)
A Magic Lamp Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- hdu-3183A Magic Lamp(贪心)
题目的意思是: 给你一个大数,然后删减其中的K个数,并且剩下的数还是按原来在的先后次序排列,求所得的那个数最小的那个数. 思路:贪心(要取得数最小,你从左往右选数的时候,选的第一数,就是选后组成数的位 ...
- HDU 5795:A Simple Nim(博弈)
http://acm.hdu.edu.cn/showproblem.php?pid=5795 A Simple Nim Problem Description Two players take t ...
- HDU 6188:Duizi and Shunzi(贪心)(广西邀请赛)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6188 题意 有n个数字,每个数字小于等于n,两个相同的数字价值为1,三个连续的数字价值为1 .问这n个 ...
- HDU 6011:Lotus and Characters(贪心)
http://acm.hdu.edu.cn/showproblem.php?pid=6011 题意:共有n种字符,每种字符有一个val和一个cnt,代表这个字符的价值和数量.可以制造的总价值是:第一个 ...
- HDU 3487:Play with Chain(Splay)
http://acm.hdu.edu.cn/showproblem.php?pid=3487 题意:有两种操作:1.Flip l r ,把 l 到 r 这段区间 reverse.2.Cut a b c ...
- HDU 5968:异或密码(暴力)
http://acm.hdu.edu.cn/showproblem.php?pid=5968 题意:中文题意. 思路:一开始不会做,后来发现数据范围很小,而且那个数要是连续的,所以可能把所有情况枚举出 ...
随机推荐
- Redis 一些高级用法
延迟消息队列 利用 expire keyspace notification Redis 过期时,会向特定的消息队列发送消息,监听该消息队列 在 redis.conf 修改 notify-keyspa ...
- Plupload上传实例《模仿微云上传实例》,带源码
Plupload上传实例<模仿微云上传实例>,带源码,作者:鱼塘总裁 如有疑问,加群交流:646104701 一.实例截图 1.上传过程 2.上传成功 3.上传失败 4.最小化 二.所需文 ...
- delphi 获取大于2G的物理内存大小
一般情况下,我们是用GlobalMemoryStatus 来获取物理内存大小的 但该API在物理内存大小超过2G的时候,返回值均为2GB.因此,没有办法获取真实的物理内存大小,所以需要对此进行改进. ...
- Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法
原文:Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法 [函数名称] 彩色图像密度分割函数 DensitySegmentProcess(WriteableB ...
- PE格式大图
- 修改Android Studio默认的API Level(SDK版本)
原文:修改Android Studio默认的API Level(SDK版本) Android Studio(2.1.2)新建工程的时候只会让你选择最低支持的SDK版本,默认的目标编译SDK版本会以系统 ...
- [Erlang-0016][aque_tcp] 一个 Erlang TCP 组件
项目地址:https://github.com/liangjingyang/aque_tcp 欢迎任何形式的转载,但请务必注明出处:http://www.cnblogs.com/liangjingya ...
- Another maybe monad library for ruby
欢迎任何形式的转载,但请务必注明出处:http://www.cnblogs.com/liangjingyang 项目地址:https://github.com/liangjingyang/maybe_ ...
- WPF全局异常捕获
跟着<WPF专业编程开发指南>这书打的代码的,自己在正式项目中测试通过,可以抓取到全局的异常,用的log4net来记录日志 核心代码: 写在App.xaml.cs中 /// <sum ...
- qt+opencv对两幅图片进行融合
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 源代码: #include "widget.h" #include "ui ...