ACM 尋找最大數

OpenSoucre發表於2014-04-11

尋找最大數

時間限制: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

本題題意是從n中刪除m個數,使刪除後的數保持最大,本題在輸入n時直接定義n為字串,len為n的長度
則刪除m個數後,剩餘的數為len-m,設first = 0,second = m,
故從first到second中取一個最大的數,其first = 最大數的索引+1,second++
再從first 到second中取最大數,直到取完為止,即為答案
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main(){
    int T;
    cin >>T;
    for(int icase = 0 ; icase <  T; icase++){
        string n;
        int m;
        cin >>n >>m;
        vector<char> data(n.begin(),n.end());
        string res = "";
        int len = n.length(), first = 0 , second = m+1;
        for(int i = 0 ; i < len-m; ++i){
            vector<char>::iterator iter=max_element(data.begin()+first,data.begin()+second);
            res+=*iter;
            first = distance(data.begin(),iter)+1;
            second++;
        }
        cout<<res<<endl;
    }
}

 

 

相關文章