NYOJ 月赛 448 寻找最大数
2011-11-28 16:19 javaspring 阅读(326) 评论(0) 编辑 收藏 举报比赛前zmh给我说有水题,,如今看来,,能称之为水题的也只有这道题了,,,可惜的是,比赛时仍旧有很多人没有做出来。我当时花了30分钟左右1Y的,,感觉没有什么特殊的数据需要考虑,不明白为什么有人会错那么多次。。。亏得做出来一题,否则就被剃光头了,,,,,,悲剧。。。。。。题目:
寻找最大数
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
-
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,
比如当n=92081346718538,m=10时,则新的最大数是9888
- 输入
-
第一行输入一个正整数T,表示有T组测试数据
每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数) - 输出
- 每组测试数据的输出占一行,输出剩余的数字按原次序组成的最大新数
- 样例输入
-
2 92081346718538 10 1008908 5
- 样例输出
-
9888 98
#include <iostream> #include <string.h> #include <cstdio> #include <string> using namespace std; int main(){ int ncase,m; char ss[110]; scanf("%d",&ncase); while(ncase--){ scanf("%s",ss); scanf("%d",&m); int len=strlen(ss); int x=len-m; if(x==len) {printf("%s",ss);continue;} else { int pos=0; while(x){ for(int i=pos,max=0;i<=len-x;++i){ if(ss[i]-'0'>max){ max=ss[i]-'0'; pos=i; } } printf("%c",ss[pos]); pos++; x--; } printf("\n"); } } return 0; }