洛谷p1106 删数问题 题解
# 4.24一个重要的日子.
我人生中第一道7个测试点下载了5个的题目被我发现了,第一次用光下载数据点机会,真心坑点重重.
这题是一道很经典的贪心题目,可能是因为我太蒻了,导致我一直以为最少普及难度.
我用了几乎从未用过的"指针"(加这-> "" <-个的原因是这个“指针”是模拟指针);
这个题的贪心策略应该都明白:找第一个开始下降的那个数删,如果一直上升删最后一个。原理就不解释了;
这个题每个字符设一个指针,指向他的下一个(不是下一个字符而是下一个非空字符),这样形成了一个伪链表;
不说了,上带注释代码(有一点点瑕疵)
#include<bits/stdc++.h>
using namespace std;
struct po {//结构体(别问我po什么意思)
char sh;//字符(该序号)
int z;//指针(后继)
};
po a[];
int u;//记录字符串长度
int main() {
int s;
while() {
++u;
a[u-].z=u;//初始化后继
a[u].sh = getchar();//读入
if(a[u].sh == '') {//这里也可以不处理
a[u].sh = '!';
} if(a[u].sh == '\n')//换行的时候结束
break;
}
u--;//减去'\n'的长度
scanf("%d",&s);//输入要减去的个数
if(a[].sh ==''&&a[].sh =='!'&&s==){//最后一个数据点我自己本地测过了,但提交就WA
cout<<;//于是就打表了....大家可以屏蔽这几行把下面某几行的注释去掉,本地可以过
return ;
}
int uu=;//记录是否一直上升趋势
for(int i=; i<=s; i++) {//循环s次
for(int j=; j<u;) {//循环u-i个,至于为什这样写留给大家思考
if(a[j].sh > a[a[j].z].sh &&a[j].sh!='-'&&a[a[j].z].sh!='-') {//标记过的不要管,如果某突然个下降了
a[j].sh = '-';//标记
int pp=j-;
while(a[pp].sh == '-')//拆开链表,重新接上
pp--;
a[pp].z = a[j].z ;
uu++;//标记
break;//每次只能去掉一个
}
j = a[j].z ;//找下一个非空字符
}
if(uu==) {//若一直上升,去掉最后一个
a[u].sh = '-';
}
uu=;
// for(int k=1; k<=u; k++) {//如果不理解过程可以"解封"这些然后体会一下
// cout<<k<<"->"<<a[k].z <<" ";
// }
// for(int k=1; k<=u; k++) {
// cout<<a[k].sh ;
// }
// cout<<endl;
}
int oo=;//输出每个非空字符
int uuu=;//去除前导0
for(int i=; i<=u-s; i++) {//循环u-s次
oo = a[oo].z ;//每次找他的后继
if(uuu!=||a[oo].sh !='!'){//之前写过'!'代表0
uuu++;
if(a[oo].sh !='!')
cout<<a[oo].sh ;
else //如果是'!'就输出0
cout<<;
}
}
// if(uuu==0)//如果什么也没输出
// cout<<"0";//补0
return ;
}
洛谷p1106 删数问题 题解的更多相关文章
- 洛谷P1106 删数问题
题目描述 键盘输入一个高精度的正整数N,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N和k,寻找一种方案使得剩下的数字组成的新数最小. 输出应包括所去掉的数字的位置和 ...
- 洛谷 P1106 删数问题
一定要认真审题 “去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数” 也就是说 输入:7893400 4 输出:300 (00在原顺序中位于3后边) 输入:789 ...
- 洛谷——P1106 删数问题
https://www.luogu.org/problem/show?pid=1106 题目描述 键盘输入一个高精度的正整数N,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对 ...
- (Java实现) 洛谷 P1106 删数问题
题目描述 键盘输入一个高精度的正整数NN(不超过250250位) ,去掉其中任意kk个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的NN和kk,寻找一种方案使得剩下的数字组成的新数最小 ...
- 洛谷P2426 删数 [2017年4月计划 动态规划12]
P2426 删数 题目描述 有N个不同的正整数数x1, x2, ... xN 排成一排,我们可以从左边或右边去掉连续的i(1≤i≤n)个数(只能从两边删除数),剩下N-i个数,再把剩下的数按以上操作处 ...
- 【题解】洛谷P2426删数
链接 https://www.luogu.org/problemnew/show/P2426 念念碎 第一次接触到区间DP(瑟瑟发抖) 所以象征性地看了一下题解 这好像是一道比较基础的区间DP吧 但是 ...
- 洛谷 P1102 A-B数对 题解
P1102 A-B 数对 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈! 好吧,题目是这样的:给出一串数以及一个数字 ...
- 洛谷 P2426 删数
题目传送门 解题思路: 区间DP,f[i][j]表示区间i~j可获得的最大值,因为本题的所有区间是可以直接一次性把自己全删掉的,所以所有区间初始化为被一次性删除的值,然后枚举断点,跑区间DP. AC代 ...
- 洛谷P1012 拼数 【题解】
**原题链接** 题目描述 设有n个正整数(n ≤ 20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时 ...
随机推荐
- Java基础 -- 深入理解Java类型信息(Class对象)与反射机制
一 RTTI概念 认识Claa对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RT ...
- flink-conf.yaml
Flink 配置文件 对于管理员来说,差不多经常调整的就只有 conf 下的flink-conf.yaml : 经过初步的调整,大约有以下模块的参数(未优化) Licensed to the Apac ...
- spring boot项目能启动打包失败
如题,项目本地可以正常启动.但是用 mvn clean package打包就失败! 事件原因如下: 一.pom.xml少packing元素 <groupId>com.sanyi</g ...
- Linux 定时运行设置
脚本设置位置: /etc/cron.d SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 每个小时的01分钟执行这个脚本 ...
- springMVC中数据流解析与装载
最近在看springmvc原理时,看到一篇比较赞的博文,留存学习,如果侵权,请告知,立删. 地址: https://my.oschina.net/lichhao/blog/172562
- C++编译/运行过程中产生的各种文件
参考:https://blog.csdn.net/weixin_39609623/article/details/82348576 Windows中的obj,lib,dll,exe文件 lib是和dl ...
- CentOS下RPM方式安装MySQL5.6(转载)
之前的项目全都在windows系统环境下部署的,这次尝试在Linux系统环境下部署,于是这次我们组织在7台主机上安装了JDK.Maven.Jboss其中一台安装了Mysql,并将局域网配置好,终于大功 ...
- 同一台电脑同时装jdk1.8和jdk1.7
因为之前安装的eclipse版本要求JDK1.8或以上的版本,但在搭建SSH框架的时候老是报错,又找不到2错误源.老师建议换个低版本的jdk.所以jdk版本需要降级. 但降级以后就不能打开eclips ...
- easyui 菜单树搜索
//树形菜单搜索方法 function searchTree(treeObj,parentNode,searchCon){ var children; for(var ...
- 学习笔记-ResNet网络
ResNet网络 ResNet原理和实现 总结 一.ResNet原理和实现 神经网络第一次出现在1998年,当时用5层的全连接网络LetNet实现了手写数字识别,现在这个模型已经是神经网络界的“hel ...