【题解】删数问题(Noip1994)
题目
时间限制: 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)的更多相关文章
- 删数问题(Noip1994)
1321:[例6.3]删数问题(Noip1994) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 5127 通过数: 1595 [题目描述] 输入一个高精度 ...
- 题解 洛谷 P5324 【[BJOI2019]删数】
先考虑对于一个序列,能使其可以删空的的修改次数. 首先可以发现,序列的排列顺序是没有影响的,所以可以将所有数放到桶里来处理. 尝试对一个没有经过修改的可以删空的序列来进行删数,一开始删去所有的\(n\ ...
- 删数方案数(regex)
[题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同 ...
- [BJOI2019]删数(线段树)
[BJOI2019]删数(线段树) 题面 洛谷 题解 按照值域我们把每个数的出现次数画成一根根的柱子,然后把柱子向左推导,\([1,n]\)中未被覆盖的区间长度就是答案. 于是问题变成了单点修改值,即 ...
- codevs4096 删数问题
题目描述 Description 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N 和S,寻找一种方案使得剩下的数字组成的新数最小. 输入 ...
- 1145: 零起点学算法52——数组中删数II
1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 293 ...
- 【洛谷p1106】删数问题
(洛谷t2755暂时过不去了) 删数问题[传送门] 洛谷算法标签: emmmm……删数问题又牵扯到了字符串.因为毕竟高精度的数240位呢!要是输入一个整型,要码240行来求出每一位……怕是还没求出来就 ...
- ACM 删数问题 SDUT 2072
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2072.html 删数问题 Time Limit ...
- 删数问题(NOI94)
删数问题(NOI94) 输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数.编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小.输出新的正整数.(N不超 ...
随机推荐
- 欧拉-拉格朗日方程 The Euler-Lagrange Equation
在 paper: Bounded Biharmonic Weights for Real-Time Deformation 中第一次接触到 Euler-Lagrange 方程,简单记录一下. 泛函的定 ...
- 观察者模式的应用:Winform窗体之间传值
观察者模式的应用:Winform窗体传值 观察者模式的概念: 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并更新. 今天我们就学着用一下这个观察者模式,先想象 ...
- LinkedHashMap与HashMap的使用比较
现在由于项目需要,使用了LinkedHashMap,一开始由于很少用到Map,然后就直接使用了HashMap,在将数据成功存入之后取出来就出了问题,数据输出顺序没有按预期顺序输出,现在先看代码: 文件 ...
- 小程序中的pick
picker:从底部弹起的滚动选择器. 属性:model string类型 说明:选择器类型 : selector 普通选择器 multiSelector 多列选择器 time 时间选择 ...
- 构造分组背包(CF)
Ivan is a student at Berland State University (BSU). There are n days in Berland week, and each of t ...
- PythonI/O进阶学习笔记_11.python的多进程
content: 1. 为什么要多进程编程?和多线程有什么区别? 2. python 多进程编程 3. 进程间通信 ======================================= ...
- 「 从0到1学习微服务SpringCloud 」13 断路器Hystrix
背景与功能 在微服务架构中,很多情况下,各个服务之间是相互依赖,一个服务可能会调用了好几个其他服务,假设其中有一个服务故障,便会产生级联故障,最终导致整个系统崩溃无法使用(这称为雪崩效应),Sprin ...
- ELK实战-elasticsearch安装
操作系统: centos版本 7.4 防火墙 关闭 selinux 关闭 elasticsearch版本 6.3.2 java版本 1.8 server1 192.168.10.126 server2 ...
- 学习 解决用户验证、单点登录、api访问控制的开源框架 的 十月 第一弹:
step one 去饭 源码 ps :https://identityserver.io/ 这个官网. ps: https://github.com/IdentityServer 这是 源码网
- 龙芯 3B1500 Fedora28 安装笔记
版权声明:原创文章,未经博主允许不得转载 龙芯 3A4000 已经发布,十年前的 3B1500 早就落伍了.但我还是打算把它作为寒假刷 ACM 题的主力机 并将此当作年后收到 4000 的预习. 龙芯 ...