HUST 1586 數字排列

2021-09-07 09:11:48 字數 1170 閱讀 1584

時間限制:1秒 記憶體限制:128兆

91 次提交 36 次通過

題目描述

現有n個k位的數字,你的任務是重新安排數字每一位的位置,使得重新安排後這n個數字中最大的數字和最小的數字之差的絕對值最小,對於每一位的調整是相對於所有的數字的,例如有3個數字1234、4321和7890,重新安排的方案是交換第二位和第三位,則3個數字變為1324、4231和7980。

輸入輸入包括多組樣例,每組樣例包括多行。每組樣例的第一行包括2個整數n和k,分別代表數字的個數和位數(1 ≤ n, k ≤ 8),接下來的的n行包括n個k位的數字,允許調整後的數字有前導0(例如000123代表123)。

輸出每組資料輸出乙個整數,為調整後最大數字與最小數字之間的最小差值。

樣例輸入

3 3

010909

0126 4

5237

2753

7523

5723

5327

2537

樣例輸出

3

2700

提示第二組樣例可以將原順序(1,2,3,4)調整為(3,1,4,2),則第二個數字變為5237,第三個數字變為2537,分別為這樣變換後的最大值和最小值,可以驗證這樣變換後的差值2700為最小差值。

分析:直接k!的去列舉全排列,將所有列都重新排列,然後暴力處理出來每一行的新數字,再維護乙個最大值乙個最小值相減即可。

陣列a用來記錄輸入的字串,陣列b用來記位數,然後進行全排列,陣列c用來裝陣列a全排列後的值,注意陣列c要清零

要用到next_permutation全排列,自動生成下個序列!詳細解釋請參考我的部落格!

下面附上ac**:

1 #include 2

using

namespace

std;

3char a[10][10];4

intmain()529

}30 sort(c+1,c+1+n);//

排序,將陣列c中的值進行公升序排列

31 output=min(output,c[n]-c[1]);//

維護乙個最大值乙個最小值相減,求最小差值32}

33 cout35return0;

36 }

數字排列 (HUST 1586)

現有n個k位的數字,你的任務是重新安排數字每一位的位置,使得重新安排後這n個數字中最大的數字和最小的數字之差的絕對值最小,對於每一位的調整是相對於所有的數字的,例如有3個數字1234 4321和7890,重新安排的方案是交換第二位和第三位,則3個數字變為1324 4231和7980。input 輸入...

騰訊 數字排列

宣告 題目來自 http blog.csdn.net v july v archive 2010 11 17 6015165.aspxhttp blog.csdn.net v july v archive 2011 01 10 6126406.aspx自己先做一遍。題目 初看此題,貌似很難,10分鐘...

排列數字問題

數字排列問題 今有7對數字 兩個1,兩個2,兩個3,兩個7,把它們排成一行。要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是乙個符合要求的排列 17126425374635 當然,如果把它倒過來,也是符合要求的。請你找出另一種符合要求的排列法,並且這...