hdu 3183 rmq+鸽巢原理
题目大意:
给你一个数字字符串序列,给你要求删掉的数字个数m,删掉m个数使的剩下的数字字符串的之最小。并输出这个数字;
基本思路;
这题解法有很多,贪心,rmq都可以,这里选择rmq,因为很久没有写rmq的题目了,所以这里先来一发。
至于鸽巢原理,这应该是一个很显而易见的道理,自己去脑补吧。
代码如下:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath> using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 10000+10;
char s[maxn];
int a[maxn],rmq[maxn][20],ans[maxn];
int n,m;
void RMQ_Init(){
for(int j=1;(1<<j)<=n;j++){
for(int i=1;i+(1<<j)-1<=n;i++){
if(a[rmq[i][j-1]]<=a[rmq[i+(1<<(j-1))][j-1]]){
rmq[i][j]=rmq[i][j-1];
}else{
rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
}
}
}
}
int query(int l,int r){
int k=floor(log((r-l+1))/log(2.0));
int res;
if(a[rmq[l][k]]<=a[rmq[r-(1<<k)+1][k]]){
res=rmq[l][k];
}else{
res=rmq[r-(1<<k)+1][k];
}
return res;
}
int main(){
while(scanf("%s%d",s,&m)!=EOF){
n=strlen(s);
for(int i=0;i<n;i++){
a[i+1]=s[i]-'0';
rmq[i+1][0]=i+1;
}
RMQ_Init();
int id=1;
int pos=0;
for(int i=m+1;i<=n;i++){
id=query(id,i);
ans[pos++]=a[id++];
}
int sign=inf;
for(int i=0;i<pos;i++){
if(ans[i]!=0){
sign=i;
break;
}
}
if(sign==inf){
printf("0\n");
}else{
for(int i=sign;i<pos;i++){
printf("%d",ans[i]);
}
printf("\n");
}
}
return 0;
}
hdu 3183 rmq+鸽巢原理的更多相关文章
- HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- HDU 1205 吃糖果 (鸽巢原理)
题目链接:HDU 1205 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢 ...
- hdu 1205 吃糖果【鸽巢原理】
题目 这道题不难,看别人博客的时候发现大家都说用鸽巢原理,这是个什么鬼,于是乎百度之. 1.把某种糖果看做隔板,如果某种糖果有n个,那么就有n+1块区域,至少需要n-1块其他种糖果才能使得所有隔板不挨 ...
- POJ3370&HDU1808 Halloween treats【鸽巢原理】
题目链接: id=3370">http://poj.org/problem?id=3370 http://acm.hdu.edu.cn/showproblem.php?pid=1808 ...
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)
B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- poj 2356 Find a multiple(鸽巢原理)
Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...
- poj2356 Find a multiple(抽屉原理|鸽巢原理)
/* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...
随机推荐
- 【Java】JSONObject学习
介绍 JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素.JSONObject可以很方便的转换成字符串,也可以 ...
- dos编辑文件上传到unix系统多余^M删除方法
linux上的文件sz到window编辑后多出^M, 方法一: 1.grep -anR '^M' filename |wc -l2.crontab -e 或vim filename3.:set ff ...
- [CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)
题目描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响. 选取显像管的任意一个平面,一开始平面内有个$n$电子,初始速度分别为$v_i$,定义飘升系数为$$\sum \li ...
- rap安装mysql
1.yum仓库下载MySQL: yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm ...
- postman测试wsdl类型接口
1 IP地址来源搜索 WEB 服务 接口信息 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 2 设置接口调用地址 ...
- poj1065Wooden Sticks(dp——最长递减数列)
Description There is a pile of n wooden sticks. The length and weight of each stick are known in adv ...
- Linux命令整理-Kali
网络相关 桥接模式下无法联网:设置桥接网卡地址为指定网卡(如dual band) route -n 查看网关/子网掩码 虚拟机中屏幕太小-设置中调节分辨率 DNS配置:cat /etc/resolv. ...
- knn算法手写字识别案例
import pandas as pd import numpy as np import matplotlib.pyplot as plt import os from sklearn.neighb ...
- vue使用vue-router beforEach实现判断用户登录跳转路由筛选
vue使用vue-router beforEach实现判断用户登录跳转路由筛选 :https://www.colabug.com/3306814.html 在开发webApp的时候,考虑到用户体验,经 ...
- [JSOI2007]建筑抢修(贪心+后悔)
[JSOI2007]建筑抢修(贪心+后悔) 洛谷题目传送门 吐槽 这是一道经典的贪心后悔的题目 做过贪心加后悔的题目的应该一眼可以看出来 解题思路 首先按倒塌时间T2排序,再从1枚举到n,能修就修,发 ...