【3002】删去K个数字
Time Limit: 3 second
Memory Limit: 2 MB
【问题描述】
输入一个数字串S和整数K(K小于数字串S的长度),从S中删去K个数字,使剩余数字在保持相对位置不变的情况下构成一个值最小的整数。例如:S='19990608',K=4,处理结果为608。如果串S含有非数字字符,则输出'error',如果K的值大于串S的长度,则输出'error'。
【输入】
两行,第一行为数字串S,第二行为整数K。
【输出】
一行,处理结果或error
【输入样例】
19990608
4
【输出样例】
608
【题解】
这是一道贪心题。
先考虑一种比较简单的情况。
123456,接下来 删除一个数字。
如果删掉1 就是2 开头了
这显然不是最小的,因为我们可以删掉2,那这个数字就是1开头的了,但删掉2第二位是3,如果删掉3 第二位就是2 这样更优。。。
如此如此可以知道 删掉6是最优的情况。
再来复杂点
489456 这里就不能单纯地删掉6了。我们可以把它分成两个部分
489 和 456 如果单纯対这两个数做删除操作 我们可以容易地得到答案。
那么问题来了,我们应该删掉9还是删掉6呢?
答案是9,因为如果我们让后者更小,最后结果是489XXX
而如果让前者更小,最后结果则是484XXX,显然让前者更小是更优的解法。
或者你可以把这489和456看成X和Y,然后把这两个数组成一个2位数
最后的结果是X*10+Y,那让X更小显然是更优的解。
如果是484950这个 就把 48 和49 和50 看成X,Y,Z显然也是让X最小是最优的解。
就是这样吧。
这里的9和6是两个递增区间的最后一个数字。
while (a[i] <= a[i+1]) i ++ ,这样找到i,然后用erase删掉就好。
不要忘记去除开头可能多余的0;
【代码】
#include <cstdio>
#include <string>
#include <iostream>
#include <stdlib.h> using namespace std;
string s1;
int n,k; void s_p()
{
printf("error");
exit(0);
} void input_data()
{
cin >> s1;
n = s1.size();
scanf("%d",&k);
if (k > n) //如果输入的K不符合要求,则判错
s_p();
if (k == n) //
{
printf("0");
exit(0);
}
} void get_ans()
{
for (int i = 0;i < n;i++)
if (s1[i] < '0' || s1[i] > '9') //如果有非法字符 也判错
s_p();
for (int i = 1;i <= k;i++) //删除k个数字
{
int j = 0;
while (s1[j] <= s1[j+1]) j++; //找到第一个递增区间的最后一个数字
s1 = s1.erase(j,1); //删掉这个数字。
}
int m = s1.size();
int i = 0;
while (m > 1 && s1[i] == '0') //删掉开头多余的0
{
s1 = s1.erase(0,1);
m--;
} } void output_ans()
{
cout << s1 << endl;
} int main()
{
input_data();
get_ans();
output_ans();
return 0;
}
【3002】删去K个数字的更多相关文章
- 删去k个数字后的最小值
public static String removeKDigits(String num,int k) { //新整数的最终长度=原长度 - k int newLength=num.length() ...
- [LeetCode] Find K Pairs with Smallest Sums 找和最小的K对数字
You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...
- 面试题:m个长度为n的ordered array,求top k 个 数字
package com.sinaWeibo.interview; import java.util.Comparator; import java.util.Iterator; import java ...
- Hulu面试题解答——N位数去除K个数字(解法错误sorry)
给定一个N位数,比如12345,从里面去掉k个数字.得到一个N-k位的数.比如去掉2,4,得到135,去掉1,5.得到234.设计算法.求出全部得到的N-k位数里面最小的那一个. 写的代码例如以下,思 ...
- [SOJ]寻找第k大数字(numberk)
Description 经过长时间的筹备工作,在Jourk,Ronny,Plipala,阿长,阿沈等人的努力下,DM实验室建立起自己的系列网站,其中包括三个大板块:DMOJ首页.DMOJ论坛.DMOJ ...
- [Swift]LeetCode373. 查找和最小的K对数字 | Find K Pairs with Smallest Sums
You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Define ...
- [Swift]LeetCode402. 移掉K位数字 | Remove K Digits
Given a non-negative integer num represented as a string, remove k digits from the number so that th ...
- 区间求小于等于k的数字个数 hdu4177
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目意思给出一个序列,叫我们求一个区间里面小于等于k的数字个数. 这里面我用分块和主席树两种方法 ...
- 字典序的第K小数字
今天zyb参加一场面试,面试官听说zyb是ACMer之后立马抛出了一道算法题给zyb:有一个序列,是1到n的一种排列,排列的顺序是字典序小的在前,那么第k个数字是什么?例如n=15,k=7, 排列顺序 ...
随机推荐
- 2017国家集训队作业[agc014d]Black and White Tree
2017国家集训队作业[agc014d]Black and White Tree 题意: 有一颗n个点的树,刚开始每个点都没有颜色.Alice和Bob会轮流对这棵树的一个点涂色,Alice涂白,B ...
- 经典的横线中间文字css布局---flex布局
html: <div class="title"> <div class="line"></div> <div cla ...
- Model、ModelMap、ModelAndView的作用及区别
Model.ModelMap.ModelAndView的作用及区别 对于MVC框架,控制器controller执行业务逻辑 用于产生模型数据Model 视图view用来渲染模型数据 Model和Mod ...
- 洛谷 P1957 口算练习题
洛谷 P1957 口算练习题 题目描述 王老师正在教简单算术运算.细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习. 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效 ...
- 免费超大量邮件发送服务Amazon SES和Mailgun提供SMTP和API支持
一般来说网站注册.论坛消息.新闻推送.广告宣传等都会有发送邮件服务,大量的邮件发送服务如果用PHP来发送,一是会消耗主机资源,二是容易被各大邮箱判定为垃圾邮件而被拒收.用第三方的邮局服务发送邮件,可以 ...
- Android线程池(二)——ThreadPoolExecutor及其拒绝策略RejectedExecutionHandler使用演示样例
MainActivity例如以下: package cc.vv; import java.util.concurrent.LinkedBlockingQueue; import java.util.c ...
- IPv6地址表示方法详解
IPv6是互联网协议的第六版:最初它在IETF的 IPng选取过程中胜出时称为互联网新一代网际协议(IPng),IPv6是被正式广泛使用的第二版互联网协议. 现有标准IPv4只支持大概40亿(4×10 ...
- 7lession-基础数据使用介绍
1.数值 这个使用比较简单 a = 1 b = 3.2 c = 12.5+4j d = 20L 2.字符串 代码 s = "hello world,i am comming" pr ...
- onvif开发实战2--总结框架搭建
完成框架搭建后,编写自己的主函数起onvif服务 编写makefile objs = onvif.o onvif_func.o duration.o soapC.o soapServer.o stds ...
- Spring中提供的集合工具类util CollectionUtils
转自:https://blog.csdn.net/fangwenzheng88/article/details/78457850 CollectionUtils类 /* * Copyright 200 ...