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