中石油:
【問題】:
給出乙個n位數,要求刪掉其中k位數字,使得剩下的數字組成的數盡量大。 輸入
第1行:兩個正整數n, k(1 <= k < n <= 500,000)。
第2行:乙個n位正整數(無前導0)。
輸出輸出一行,乙個正整數,表示剩下的數的最大值。
樣例輸入
4 21924
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位數 忽略字首...