HDU4671 找規律排列問題

2021-06-17 22:16:27 字數 1412 閱讀 6860

source: 2013 multi-university training contest 7 1006

題目大意: 題目意思還是比較麻煩的,當時做多校的時候詢問題意的人就特別多。給你n個伺服器,m個資料庫。每個資料庫有乙個序列,每個序列有n個數,作為優先請求的順尋,例如n=5,m=3.對於 第乙個資料庫假設排列是 1 2 3 4 5那麼如果1號伺服器沒壞,這個資料庫就向一號伺服器遞交申請使用,這時候2號是空閒的。如果一壞了,那麼將使用二號,以此類推。那麼m個資料庫就會有m個n個數的排列。但是這樣的排列必須滿足一定得條件,就是對於乙個時刻,最多被使用伺服器的次數減去最少被使用的伺服器次數不能超過1(<=1)。這就是說平衡每個伺服器的使用,盡可能使得工作平均。同時如果假定乙個伺服器壞掉(最多乙個),這是的工作狀態也是滿足這個平衡條件的(壞掉的不計入使用次數)。輸出這樣的排列,special judge,輸出一種可能即可。

給的樣例 n=5 m=3

2 4 3 1 5        如果都沒壞, 1,2,3使用1次,4,5使用0,最大不超過1. 如果4,5壞掉,對使用暫時沒用影響。如果1壞了,那麼2,5,3被使用……2,3壞掉一樣

1 5 4 2 3

3 5 2 4 1

思路:因為要盡可能使每種伺服器使用均衡,對於第一次序的,只需要按照1,2,3……n,1,2,3……這樣排列就好了。

例如 n=6 m=3     為    n=3 m=6 為  

1                                    1

2                                    2

3                                    3

因為最多壞掉乙個,其實只是將第二列左移到壞掉的一列上,其實只需要考慮前兩列。因為我們的排序時盡可能使小的號碼使用先,所以號碼大的必然比小的使用次數少。那麼我們對於替換就優先使用大序號替換。 我們再開乙個陣列t,記錄當前替換序號,初始化為n,我們只需要討論一號工作站相同的情況的第二列,設為a。 如果第二列與第一列不同 t[a]加入第二列,t[a]--;如果與第一列相同,t[a]-1加入再--。之後兩列拍好,後面n-2列只要不重複即可。

**:#include#include#includeusing namespace std;

int s[102];

int a[102][3];

int main()

temp=n;

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

s[i]=n;

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

else

}int temp1=1;

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

{temp1=1;

for(int j=1; j<=n; j++)

{if(j==1||j==2) cout<

HDU 3788 ZOJ問題(找規律)

題目鏈結 從樣例中找到其規律 就是第一次出現z的之前字元的個數 第一次出現z和最後出現j之間的 o 的個數 且不能為空 最後出現j之後的字元個數accepted 同理zoj也適用 include include include include include include includeusing...

找規律問題(迴圈問題)

時間限制 1.000 sec 記憶體限制 16 mb 題目描述 國王有乙個魔鏡,可以把任何接觸鏡面的東西變成原來的兩倍 只是,因為是鏡子嘛,增加的那部分是反的。比如一條項鍊,我們用ab來表示,不同的字母表示不同顏色的珍珠。如果把b端接觸鏡面的話,魔鏡會把這條項鍊變為abba。如果再用一端接觸的話,則...

數學 找規律HDU 1030

題目難點在於找到規律 根據公式求解 從三個角度看這個圖,level,left,right,如下圖,題目的答案就是3個圖上2個點之間的層數的高度差之和。例如 6 12 level 1,left 1,right 1,答案就是3。例如 3 12 level 2,left 1,right 2,答案就是5。i...