【题解】删数问题(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不超 ...
随机推荐
- CF854C Planning优先队列|set
C. Planning 传送门 Helen works in Metropolis airport. She is responsible for creating a departure sched ...
- bzoj 2683 CDQ分治
题目描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x,y<=N,A是正整数 将格子x,y里的数 ...
- 高校表白app使用体验
在本次软件工程专业交流会中,有幸了解了很多学长学姐研究并且开发的软件,使我受益匪浅.其中最让我记忆犹新的还属一款名为高校表白app的软件.首先这款app的主要功能是为我们提供一个委婉的告白平台,我们可 ...
- Android Studio 图形化设计 UI 界面
我们开发 Android 程序必定是从 UI 开始的 ,使用最新版的 Android Studio 可以在图形化界面下设计软件 UI, Android Studio 默认的布局是 Constraint ...
- github 删除库
1.查看库 2.选择想要删除的库,点击setting 3.删除库
- 使用Async方法 Using Async Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-32.
- testng使用详解
一.testng 介绍 TestNG 是一个测试框架,其灵感来自 JUnit 和 NUnit,但同时引入了一些新的功能,使其功能更强大,使用更方便. TestNG 设计涵盖所有类型的测试:单元,功能, ...
- selenium,测试套件的使用
学习 selenium-webdriver 已经一段时间了,最近学习到,测试用例的批量执行,和测试套件的使用,有点自己的理解,不晓得对不对,希望大家指正! 写一个测试用例 baidu.py c ...
- CSS-14-浮动
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- python之路:day2
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...