刪數問題(n位數,刪掉k位,使其最大)

2021-08-08 07:41:09 字數 789 閱讀 2554

中石油:

【問題】:

給出乙個n位數,要求刪掉其中k位數字,使得剩下的數字組成的數盡量大。 輸入

第1行:兩個正整數n, k(1 <= k < n <= 500,000)。

第2行:乙個n位正整數(無前導0)。

輸出輸出一行,乙個正整數,表示剩下的數的最大值。

樣例輸入

4 2

1924

94

【解析】:

目的是使得高位盡量大。 貪心

因此,從左邊開始掃,設兩個下標,l和r

r一直往右走。

l始終在r的左邊

只要a[l]

否則,r++,l從r的左邊重新執行這個過程

這個過程執行完,一定會剩下乙個不上公升的序列,需要繼續刪的話,從右邊開始刪小數。

【**】:

#include #include #include #define mset(a,i) memset(a,i,sizeof(a))

using namespace std;

typedef long long ll;

const int max=1e6+5;

char a[max];

int vis[max];

int main()

l=r;r++;

} r=n-1;

while(k&&r>=0)

r--;

} int flag=1;

for(int i=0;i

n位非負整數移除k位,使剩餘的數最小 大

n位非負整數移除k位,使剩餘的數最小輸入 num 1432219 k 3 輸出 1219 解釋 移除掉三個數字 4,3,和 2 形成乙個新的最小的數字 1219。0 k n public static string removekdigitstosmallest string num,int k d...

求出5位數和6位數中各位數字之和為N的回文數

問題描述 123321是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入乙個正整數n,程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 輸入格式 輸入一行,包含乙個正整數n。輸出格式 按從小到大的順序輸出滿足條件的整數,每個整數佔一行。樣例輸入 52樣例輸出 899998 989...

南陽題目96 n 1位數

時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 已知w是乙個大於10但不大於1000000的無符號整數,若w是n n 2 位的整數,則求出w的後n 1位的數。輸入 第一行為m,表示測試資料組數。接下來m行,每行包含乙個測試資料。輸出輸出m行,每行為對應行的n 1位數 忽略字首...