尋找最大數
時間限制: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; } }