4137:最小新整数

Posted aiqinger

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4137:最小新整数相关的知识,希望对你有一定的参考价值。

 

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?
例如: n = 9128456, k = 2, 则生成的新整数最小为12456

输入
第一行t, 表示有t组数据;
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k。
输出
t行,每行一个数字,表示从n中删除k位后得到的最小整数。
样例输入
2
9128456 2
1444 3
样例输出
12456
1

//对原来数字减去其中的一位,并且保证减去后的数字是最小的整数
//记录是否有删除数字的操作,false为无删除操作,true有删除操作
//对于9128456,第一次删除9,第二次删除8,9>1,8>4,从数的最高位往最低位数,
//如果碰到某一位数字大于它后面一位的数字,就删除这位数字
//数字类似于123456789这样的,一直升序的话,删除最后一位

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int a[100];
 4 void fun(int n){//对原来数字减去其中的一位,并且保证减去后的数字是最小的整数 
 5                 //记录是否有删除数字的操作,false为无删除操作,true有删除操作 
 6                 //对于9128456,第一次删除9,第二次删除8,9>1,8>4,从数的最高位往最低位数,
 7                 //如果碰到某一位数字大于它后面一位的数字,就删除这位数字 
 8                 //数字类似于123456789这样的,一直升序的话,删除最后一位 
 9     int flag=0;
10     for(int i=0;i<n-1;i++){
11         if(flag==1||a[i]>a[i+1]){
12             a[i]=a[i+1];
13             flag=1;
14         }
15     }
16 }
17 
18 int main() {
19     int n,k,len;
20     cin>>n;
21     while(n--) {
22         string s;
23         cin>>s>>k;
24         len=s.length();
25         for(int i=0; i<len; i++) {
26             a[i]=s[i]-0;
27         }
28         while(k--){
29             fun(len);
30             len--;
31         }
32         for(int i=0;i<len;i++){
33             cout<<a[i];
34         }
35         cout<<endl;        
36     }
37     return 0;
38 }

 

 

 

以上是关于4137:最小新整数的主要内容,如果未能解决你的问题,请参考以下文章

[BZOJ4137][FJOI2015]火星商店问题

P4137 Rmq Problem / mex

莫队 p4137

luogu4137 Rmq Problem / mex - 莫队

Luogu 4137 Rmq Problem / mex

3528:最小新整数