题目

时间限制: 1000 ms 内存限制: 65536 KB

提交数: 11506 通过数: 3852

【题目描述】

输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。

输出新的正整数。(n不超过240位)

输入数据均不需判错。

【输入】

n

s

【输出】

最后剩下的最小数。

【输入样例】

175438

4

【输出样例】

13

分析

不多说,就是删掉递减序列的第一个元素

测试样例是比较水的,这里主要说一下几个特判:

1.前导零

2.像这样的样例:

1444删3位

这是没有严格递减序列的,如果在循环中不缩减整数长度的话,最后啥也没删,还是1444,所以有两种写法

code

#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(int i=a;i<=b;i++)
#define UF(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
typedef long long ll; int n, a[300], s;
string p;
int main()
{ int flag = 0; cin >> p;
n = p.length(); F(i,0,n-1){
a[i + 1] = p[i] - '0'; }
int i = 1;
while(i <= n){
if(a[i] == 0){
a[i] = -1;
i++;
}
else break;
}
cin >> s;
int s0 = s;
while(s0--){
int i = 1;
while(i <= n){
if(a[i] == -1){
i++;
continue;
}
int j = i + 1;
while(a[j] == -1) j++;
if(a[i] <= a[j])//是否取等问题,
//55567 删3; 1444删3
i++;
else
break;
}
a[i] = -1;
}
int shan = 0;
F(i,1,n){
if(a[i] == -1) shan++;
}
if(shan < s){//要手动判断一下
int end = n;
for(end;end >= 1; end--){
if(a[end] != -1){
a[end] = -1;
shan ++;
}
if(shan == s)
break;
}
}
i = 1;
while(i <= n){//删后的前导零和前导-1
if(a[i] != -1 && a[i] != 0) break;
else i++;
}
while(i <= n){
if(a[i] != -1){
flag = 1;
cout << a[i];
}
i++;
}
if(!flag) cout << 0;
cout << endl; return 0;
}

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int s;
int n[100000];
string in;
bool flag;
int strlen(string ff){
// cout << "func" << endl;
int tot = 0;
while(ff[tot++] != '\0');
tot--;
return tot;
}
int t;
int main(){ flag = 0;
cin >> in;
cin >> s;
for(int i = 0;i < strlen(in); i++){
n[i] = in[i] - '0';
}
int len = strlen(in);
for(int i = 1;i <= s; i++){
for(int j = 0;j < len - 1; j++)
if(n[j] > n[j+1]){
for(int k = j;k < len-1;k++){
n[k] = n[k+1];
}
break;
}
len--;//如果找不到递减序列,就直接删最后一个元素
}
for(int i = 0;i < len; i++){
if(n[i] != 0) flag = 1;
if(flag) cout << n[i];
}
if(flag) cout << endl;
if(!flag) cout << 0 << endl; return 0;
}

1231 最小新整数 ,这是ybt几乎一样的题

【题解】删数问题(Noip1994)的更多相关文章

  1. 删数问题(Noip1994)

    1321:[例6.3]删数问题(Noip1994) 时间限制: 1000 ms         内存限制: 65536 KB提交数: 5127     通过数: 1595 [题目描述] 输入一个高精度 ...

  2. 题解 洛谷 P5324 【[BJOI2019]删数】

    先考虑对于一个序列,能使其可以删空的的修改次数. 首先可以发现,序列的排列顺序是没有影响的,所以可以将所有数放到桶里来处理. 尝试对一个没有经过修改的可以删空的序列来进行删数,一开始删去所有的\(n\ ...

  3. 删数方案数(regex)

    [题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同 ...

  4. [BJOI2019]删数(线段树)

    [BJOI2019]删数(线段树) 题面 洛谷 题解 按照值域我们把每个数的出现次数画成一根根的柱子,然后把柱子向左推导,\([1,n]\)中未被覆盖的区间长度就是答案. 于是问题变成了单点修改值,即 ...

  5. codevs4096 删数问题

    题目描述 Description 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N 和S,寻找一种方案使得剩下的数字组成的新数最小. 输入 ...

  6. 1145: 零起点学算法52——数组中删数II

    1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 293 ...

  7. 【洛谷p1106】删数问题

    (洛谷t2755暂时过不去了) 删数问题[传送门] 洛谷算法标签: emmmm……删数问题又牵扯到了字符串.因为毕竟高精度的数240位呢!要是输入一个整型,要码240行来求出每一位……怕是还没求出来就 ...

  8. ACM 删数问题 SDUT 2072

    http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2072.html 删数问题 Time Limit ...

  9. 删数问题(NOI94)

    删数问题(NOI94) 输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数.编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小.输出新的正整数.(N不超 ...

随机推荐

  1. AcWing 251. 小Z的袜子| 分块+莫队

    传送门 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿. 终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命. 具体来说,小Z把这N只袜子从 ...

  2. CMS总结

    过程 初始标记 从roots(例如:thread stack引用的对象,static对象),新生代对象,标记直接引用的老年代对象. 并发标记 利用初始标记阶段标记的对象,递归标记整个老年代. 该阶段与 ...

  3. Java之File类用法总结

    File类概述:文件和文件目录路径的抽象表达形式,与平台无关.1.File能新建.删除.重命名文件和目录,但File不能访问文件内容本身.如果需要访问文件内容本身,则需要使用输入/输出流.2.想要在J ...

  4. SharePoint REST 上传文件请求403错误

    最近,需要在SharePoint上传文件到文档库,但是,上传的过程报错了. 错误代码 { "error": { "code": "-213057525 ...

  5. scalikeJDBC的restapi

    ScalikeJDBC是一个Scala的JDBC框架,适用于绝大多数RDBMS数据库(关系数据库) 重要的是,在这几天简单的使用了一下,用sqlserver来测试了一下用mysql或者h2的scali ...

  6. Flutter兼容AndroidX

    参考官方文档:https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility 第一步 distribu ...

  7. 递推 dp

    工大要建新教学楼了,一座很高很高的楼,它有n层.学校为了减少排电梯的队伍,建造了好多好多电梯,共有m个.为了让电梯有序,学校给每个电梯设定了独特的可停楼层,如 x1 x2 y1 y2 表示,x1楼层到 ...

  8. AI漫谈:我们距离实现《庆余年》里的五竹叔机器人还有多远?

    ​(警告: 本文包含少量剧透内容,请酌情阅读)   五竹叔是机器人吗? 看过庆余年的朋友,一定对五竹叔印象深刻,外表英俊潇洒,一袭黑衣加黑布条蒙眼,充满神秘侠客气息.五竹叔不但神秘,而且言行举止常常很 ...

  9. win10 指纹无法登记

    搞了好久指纹登记不了,一度认为是电脑有问题.后来终于找到答案: 那就是先删除PNI密码再登记指纹! 经过重装驱动屡试无果,最后突发奇想,把PIN码删除掉再登记指纹,果然可以了. ----------- ...

  10. Linux初始化Git环境

    第一步:设置Git全局用户名和邮箱 git config --global user.name "你的用户名" git config --global user.email &qu ...