首页 > 其他分享 >删数问题

删数问题

时间:2023-05-12 11:00:19浏览次数:16  
标签:typedef int unsigned long 问题 删数 len define

删数问题

题目描述

键盘输入一个高精度的正整数 \(N\)(不超过 \(250\) 位),去掉其中任意 \(k\) 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 \(N\) 和 \(k\),寻找一种方案使得剩下的数字组成的新数最小。

输入格式

输入两行正整数。

第一行输入一个高精度的正整数 \(n\)。

第二行输入一个正整数 \(k\),表示需要删除的数字个数。

输出格式

输出一个整数,最后剩下的最小数。

样例 #1

样例输入 #1

175438 
4

样例输出 #1

13

题解1

规律:
4:
1 4 1 5 1 9
留 删 留 删 留 留
2:
1 5 1 9
留 删 留 删

会发现我们删除的是一个山峰,也就是比后一个数要大的数,且越靠前的山峰
基本思路:删除靠前的“山峰”,执行k次

Tips: 注意最后要删前缀0

#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ppb pop_back
#define SZ(v) ((int)v.size())
typedef long long ll;
typedef unsigned int u32;
typedef unsigned long long u64;
typedef double db;
using namespace std;
const int N = 1e5+5; 

string s;
int n;

int main() {
    cin >> s >> n;
    int len = SZ(s);
    while(n--) {
        for(int i = 1; i < len; i++) {
            if(s[i] < s[i-1]) {
                for(int j = i; j < len; j++) {
                    s[j-1] = s[j];
                }
                break;
            }
        }
        len--;
    }
    int i = 0;
    while(i <= len-1 && s[i] == '0') {
        i++;
    } 
    if(i == len) {
        cout << "0\n";
        return 0;
    }
    for(; i < len; i++) {
        cout << s[i];
    }
    return 0;
}

题解2

#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ppb pop_back
#define SZ(v) ((int)v.size())
typedef long long ll;
typedef unsigned int u32;
typedef unsigned long long u64;
typedef double db;
using namespace std;
const int N = 1e5+5; 

int n;
string s;
char c[200];    

int main() {
    cin >> s >> n;
    int len = SZ(s);        
    int k = -1;             // 上一个选的数的位置
    int cnt = 0;            // 已经选的个数
    int sy = len - n;       // 挑选sy个数
    while(sy-cnt!=0) {   
        int minn = INT_MAX;
        for(int i = k+1; i <= len-sy+cnt; i++) {         //每次选一个最小的数且位置最靠前
            if(s[i] < minn) {
                minn = s[i];
                k = i;
            }
        }
        c[cnt++] = s[k];
    }
    int i = 0;
    while(sy - i - 1 != 0 && c[i] == '0') i++;
    for(; i < cnt; i++) {
        cout << c[i];
    }
    cout << "\n";
    return 0;
}

标签:typedef,int,unsigned,long,问题,删数,len,define
From: https://www.cnblogs.com/zhyyyyy115/p/17393360.html

相关文章

  • vue-element-admin安装依赖报错问题
    前言vue-element-admin中文官网要使用中文版,直接去gitgithub下载包:https://github.com/PanJiaChen/vue-element-admin/tree/i18ngitee下载包:https://gitee.com/panjiachen/vue-element-admin/tree/i18n分支记得选择这个i18n问题解决1.修改package.json文件tui-editor这......
  • 编辑器内容返回给前端,图片无法显示的问题。
    /***给ueditor图片加上https*/functionreplaceUeditorImage($content){preg_match_all('/<img.*?src="(.*?)".*?>/is',$content,$array);$newContent=$content;foreach($array[1]as$k=>$v){$preg="/^h......
  • 关于Python爬虫使用代理的问题
    当我们使用爬虫程序进行数据采集时,经常会遇到一些网站对爬虫的限制,例如IP封禁、访问频率限制等。为了解决这些问题,我们可以使用代理服务器来进行爬虫操作。本文将介绍爬虫代理的相关知识。一、什么是爬虫代理?爬虫代理是指在爬虫程序中使用代理服务器进行数据采集的一种方式。代......
  • WebRTC获取IP地址问题,Uncaught TypeError: Cannot read property '1' of null
    WebRTC获取IP地址问题,UncaughtTypeError:Cannotreadproperty'1'ofnull临时接了个任务,客户要求某个账号只能在某个ip或者mac上登录,其余的情况的登录都要报错,首先就要解决看看怎么获取ip使用的获取IP的语句如下,类似的在网上很多,主要的获取的逻辑都是一样的<script>......
  • axios 发送 form-data 请求和 x-www-form-urlencoded请求以及相关问题
    问题notsupported{"msg":"Contenttype'multipart/form-data;boundary=--------------------------714795402464721152224475;charset=UTF-8'notsupported","code":500}这个是因为form-data请求没有被后端支持,联系后端确认请求格式;关......
  • 2023五一杯B题问题四----基于二分最大流最优解
    4.1问题四的分析:本题要求建立一个最小成本的运输策略,考虑最大网络流问题(MaximumFlowProblem),对于一个带权有向图G(V,E),其中V为图中所有点的集合,E为所有边的集合,且每一条边都有它的流量上限.这个带权有向图中有两个特殊的点:源(source)节点s和汇(sink)节点t,且这两个点......
  • go1.18版本下 beego/bee安装无法生成exe问题已解决
    我原来的项目是教育学习APP使用gin框架,很多东西都是自己原来实现的。最近开发小程序,需要重新独立后台,又重新找了下go框架研究了下,beego确实是个好框架,至少项目能用到的都考虑进去了。然后发现我本地装了一个下午,beego框架是一直生成了,bee也下载了,就是无法生成exe文件,没有bee.e......
  • 解决 apt-get Could not get lock /var/lib/dpkg/lock-frontend , it is held by proc
    问题: 用lsof命令看看这几个文件是被哪个进程锁住的啊,然后先杀掉那几个进程。不杀进程,直接移除文件的话,可能仍有其他进程在操作apt的缓存,多个命令同时写apt缓存很容易发生冲突sudolsof/var/lib/dpkg/lock-frontend 杀掉进程kill-98798 ......
  • 三色球问题
    1.问题描述一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少种可能的颜色搭配?2.问题分析假设八个球,红球a个,白球b个,黑球c个,那么c=8-a-b个。而且a<=3,b<=3,也就是说8-a-b<=63.算法设计穷举法用两个for循环,第一个for控制红球的数量,第二个控制白......
  • 一次「找回」TraceId的问题分析与过程思考
    小结:1、虽然MTrace已经通过javaagent&instrument技术可以完成Trace信息跨线程传递,但是目前只覆盖到ThreadPoolExecutor类、ScheduledThreadPoolExecutor类和ForkJoinTask类的字节码,而@Async在未指定线程池的情况下默认会启用SimpleAsyncTaskExecutor,其本质是java.util.concurren......