羅区P1106は、いくつかの問題を削除します
https://www.luogu.org/problemnew/show/P1106
JDOJ 2898:削除された対数問題
https://neooj.com:8082/oldoj/problem.php?id=2898
説明
約新しいS-桁の正の整数の後に残ったデジタル元の順序を除去する高精度の正の整数Nを入力します。与えられたNとSのプログラミングは、解決策を見つけるために、そのように新たな最小数の残りの桁。
新しい出力は正の整数。入力データエラーなしと判断される(Nは240以上はありません)。
入力
[入力]
N-
S
出力
最後に残った最小数。
サンプル入力
175438 4
サンプル出力
13
ヒント
例えば:= 175 438 N-
S. 4 =
次のように削除された数:
。= 175 438 // N-削除7
。15438 //削除5
。1438 //削除4
138 //削除8つの。
13 13 //ソリューション
精度プラス貪欲タイトル。
最小貪欲戦略は、この質問には、番号の残りの部分を確実にするために数字を削除する方法です。
原則として、選択の最大数は、しかし、明らかではない、削除します。
あなたは絵の機能に番号をすれば、あなたは遠く前方にできるだけピーク数を削除しますが、必要があります。
原理のうち貪欲、次のステップは、高精度のコードです。
私は精度弱いです。
ない醜いに、Bajiコード書き込み愚か。
しかし、彼は最初の抜け穴、またはC言語のリストを掘削しました。
ACコード:
する#include <stdio.hに> する#include < ストリング .H> チャー C [ 260 ]。 int型の、CNT。 INT メイン() { scanf関数(" %sの%は、D "、C&S)。 INT LEN = STRLEN(C); ながら(-S- ) { ため(int型 i = 0 ; I <= len- 2 ; I ++ ) 場合(C [i]が> C [I + 1 ]) { ための(int型 J = I; J <= len- 2 ; J ++ ) C [J] =のC [J + 1 ]。 破ります; } LEN - 。 } 一方(CNT <= len- 1 && C [CNT] == ' 0 ' ) CNT ++ 。 もし(CNT == LEN) のprintf(" 0 " ); 他 のための(INT J = CNTあり、j <= len- 1 ; J ++ ) のprintf(" %のC " 、C [J])。 リターン 0 ; }