NYOJ-851寻找最大数(二),栈贪心!
寻找最大数(二)
- 描述
-
给你一个数字n(可能有前缀0)。
要求从高位到低位,进行 进栈出栈 操作,是最后输出的结果最大。
- 输入
- 有多组测试数据。
对于每组数据,输入一个n(0<=n<=10^100). - 输出
- 输出栈操作后的结果。
- 样例输入
-
789
75948 - 样例输出
-
987
98457 - 提示
- (用0表示进栈,1表示出栈)
789 输出 987 过程是 000111
75948 输出 98457 过程是 0001001111
输出结果应该和输入位数相同
题意很好懂,就是利用栈进出的顺序来求最大值,看样例就明白了,不过样例往往会错误地引导你(其实是自己考虑不周),按样例我开始的思路是每个位置往后找一位最大的数用另外一个数组存起来,如果此位置上的数与找到的不相等就入栈,相等则直接输出;最后再全部输出,呵呵,秒WA;看了讨论区12级学长亮哥(现在在百度音乐)给出了一个样例7584940,输出9485740;
刚刚的思路输出9404857;明显错了,不过利用栈进出顺序确实可以得到9485740;所以在原先的思路上再加一步:如果当前位置上的元素是后面所有元素中最大的则输出(前提)并且如果栈顶元素比当前元素的后一位后面的所有元素都大则输出栈顶元素,重复判断栈顶元素;如果当前元素后面有比当前元素更大的则将当前元素入栈;
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
char a[N],b[N];//理解了b[]数组的意思就可以做了;
int main()
{
int i,j;
while(~scanf("%s",a))
{
int len=strlen(a);
strcpy(b,a);
for(i=0; i<len; i++)
for(j=i; j<len; j++)
b[i]=max(b[i],a[j]);//找到当前位置后面最大的(包括当前元素);
stack<char>q;
for(i=0; i<len; i++)
{
if(a[i]==b[i])//当前位置是后面所有元素中最大的;
{
printf("%c",a[i]);
while(!q.empty()&&q.top()>=b[i+1])//再重复判断栈顶元素与当前元素后面的后面所有元素的关系;
{
printf("%c",q.top());
q.pop();
}
continue;
}
q.push(a[i]);
}
while(!q.empty())
{
printf("%c",q.top());
q.pop();
}
printf("\n");
}
return 0;
}
学长给出的样例果然厉害,只是每次做题考虑不全,样例只是所有情况中的一种;还有太急躁,等不及将思路理清就直接写,白浪费时间!
NYOJ-851寻找最大数(二),栈贪心!的更多相关文章
- nyoj 448 寻找最大数(贪心专题)
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920813467185 ...
- nyoj 448 寻找最大数
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920813467185 ...
- nyoj 寻找最大数(二)
寻找最大数(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你一个数字n(可能有前缀0). 要求从高位到低位,进行 进栈出栈 操作,是最后输出的结果最大. ...
- 寻找最大数--nyoj题目448
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920813467185 ...
- NYOJ-448 寻找最大数(贪心)
NYOJ-448 寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920 ...
- NYOJ448寻找最大数,贪心~~
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538 ...
- NYOJ448_寻找最大数【贪心】
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描写叙述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比方当n=920813467185 ...
- NYOJ-1057 寻找最大数(三)(贪心)
寻找最大数(三) 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数. 求这个新的整数的 ...
- nyoj 寻找最大数
寻找最大数 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920813467185 ...
随机推荐
- hdu 6012 Lotus and Horticulture 打标记
http://acm.hdu.edu.cn/showproblem.php?pid=6012 我们希望能够快速算出,对于每一个温度,都能够算出它在这n颗植物中,能得到多少价值. 那么,对于第i科植物, ...
- SQL SERVER 事务例子
存储过程格式: CREATE PROCEDURE YourProcedure AS BEGIN SET NOCOUNT ON; BEGIN TRY---------------------开始捕捉异常 ...
- 最新版Kubernetes常用命令大全
#查看所有namespace的pods运行情况 kubectl get pods --all-namespaces #查看具体pods,记得后边跟namespace名字哦 kubectl get po ...
- [小记]Android缓存问题
今天晚上,产品经理打电话说我们的Android App除了问题,问题很简单就是一个缓存问题,由于这个程序是前同事写的,我也只能呵呵一笑,有些事你就得扛.还是回到正题吧,这个缓存问题,实在有点奇葩,所以 ...
- K2 blackpearl 安装向导
最近我在Windows Server 2012 R2上面安装K2 blackpearl遇到了不小的麻烦,于是乎写了这篇向导,把自己遇到的问题记录下来,留给自己和需要帮助的人参考. 首先要解压缩blac ...
- Microsoft SQL Server学习(二)
目录 关于数据库的语法: 1.创建数据库 create database 数据库名 on primary (主文件属性(name,filename,size等)) -用逗号隔开次要主要文件和次要文件 ...
- ubuntu设置root账号密码
Ubuntu Linux有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起.对于其他Linux系统来 说,一般在安装过程就设定root密码,这样 ...
- jQuery 冒泡事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- chpasswd - 成批更新用户的口令
总览 chpasswd [-e] 描述 chpasswd 从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令.在没有用 -e 这个开关选项的情况下,口令将按明文的形式接 ...
- vue工厂化完整项目目录