題解 刪數問題 Noip1994

2022-04-08 00:40:35 字數 1759 閱讀 9969

時間限制: 1000 ms 記憶體限制: 65536 kb

提交數: 11506 通過數: 3852

輸入乙個高精度的正整數n,去掉其中任意s個數字後剩下的數字按原左右次序組成乙個新的正整數。程式設計對給定的n和s,尋找一種方案使得剩下的數字組成的新數最小。

輸出新的正整數。(n不超過240位)

輸入資料均不需判錯。

【輸入】ns

【輸出】

最後剩下的最小數。

【輸入樣例】

175438

4【輸出樣例】不多說,就是刪掉遞減序列的第乙個元素

測試樣例是比較水的,這裡主要說一下幾個特判:

1.前導零

2.像這樣的樣例:

1444刪3位

這是沒有嚴格遞減序列的,如果在迴圈中不縮減整數長度的話,最後啥也沒刪,還是1444,所以有兩種寫法

#include #include #include #include #include #include #include #define f(i,a,b) for(int i=a;i<=b;i++)

#define uf(i,a,b) for(int i=a;i>=b;i--)

using namespace std;

typedef long long ll;

int n, a[300], s;

string p;

int main()

int i = 1;

while(i <= n)

else break;

} cin >> s;

int s0 = s;

while(s0--)

int j = i + 1;

while(a[j] == -1) j++;

if(a[i] <= a[j])//是否取等問題,

//55567 刪3; 1444刪3

i++;

else

break;

}a[i] = -1;

} int shan = 0;

f(i,1,n)

if(shan < s)

if(shan == s)

break;

}} i = 1;

while(i <= n)

while(i <= n)

i++;

} if(!flag) cout << 0;

cout << endl;

return 0;

}

#include #include #include #include using namespace std;

int s;

int n[100000];

string in;

bool flag;

int strlen(string ff)

int t;

int main()

int len = strlen(in);

for(int i = 1;i <= s; i++)

break;

}len--;//如果找不到遞減序列,就直接刪最後乙個元素

}for(int i = 0;i < len; i++)

if(flag) cout << endl;

if(!flag) cout << 0 << endl;

return 0;

}

1231 最小新整數 ,這是ybt幾乎一樣的題

1321 刪數問題 Noip1994

輸入乙個高精度的正整數n,去掉其中任意s個數字後剩下的數字按原左右次序組成乙個新的正整數。程式設計對給定的n和s,尋找一種方案使得剩下的數字組成的新數最小。輸出新的正整數。n不超過240位 輸入資料均不需判錯。ns 最後剩下的最小數。175438 4 13 created on 2020 2 11 ...

刪數問題 Noip1994 貪心

題目描述 輸入乙個高精度的正整數n,去掉其中任意s個數字後剩下的數字按原左右次序組成乙個新的正整數。程式設計對給定的n和s,尋找一種方案使得剩下的數字組成的新數最小。輸出新的正整數。n不超過240位 輸入資料均不需判錯。輸入 ns 輸出 最後剩下的最小數。輸入樣例 175438 4 輸出樣例 13 ...

1321 例6 3 刪數問題 Noip1994

輸入乙個高精度的正整數n,去掉其中任意s個數字後剩下的數字按原左右次序組成乙個新的正整數。程式設計對給定的n和s,尋找一種方案使得剩下的數字組成的新數最小。輸出新的正整數。n不超過240位 輸入資料均不需判錯。ns 最後剩下的最小數。175438 4 13 include includeusing ...