vijos1440 士兵 (排序,模擬)

2021-07-07 08:47:51 字數 1018 閱讀 3641

p1440士兵

accepted

標籤:其他 排序

cscii

在gridland國家,有n個處於不同位置的士兵。該國上的地方都用兩個座標(x,y)來表示。士兵能進行一次移動,每個士兵都可向上、向下、向左、或向右移動乙個單位長,這樣他就能把自己的x或y改變1或-1。

士兵們想進入乙個水平線,彼此靠近,這樣他們的最後位置就是(x,y)、(x+1,y),…,(x+n,y))。水平線上的士兵的最後順序以及整數x和y,都是任意的。

現在目標是求如此配置士兵的最少移動數。

兩個或兩個以上的士兵在同一時間不處於同一位置。

輸入檔案的第一行含有乙個整數n,1 <= n <=10000,n為士兵的數量。輸入檔案以後的n行應含有士兵的初始位置,對於每乙個i, 1<= i <= n,輸入檔案的第i+1行含有兩個用空格分開的整數x[i],y[i],他們表示第i個士兵的座標,-10000<=x[i],y[i] <=10000.

僅有一行,它的值為使士兵移動到水平線彼此相鄰的最小移動次數。

3

1 02 4

3 2

4

各個測試點1s

解析:1.由於只有四個移動方向,所以x、y可以分開考慮。

2.只考慮y,y[1]。。。。y[n]要移動到同一行,代價最小,則假設p為y的中位數,都移動到第p行,代價最小。

3.再來看x,由於x是緊密的排在一起的,我們對x排序之後,排在第 i 位的士兵一定在最終排列的第 i 位,那麼我們如果對 x 排序之後,每個x[i]-=i,就變成了將 x 移動到同一列了(與上面的問題相同了)。

**:

#include#include#includeusing namespace std;

const int maxn=1e4;

int x[maxn+10],y[maxn+10];

int main()

14 4 選單功能

選單功能就是與使用者的溝通介面。1 在workermanager.h標頭檔案中新增show menu 成員函式。class workermanager 2 在workermanager.cpp中實現show menu 成員函式。其實這個函式就是在螢幕中把選單介面列印出來,沒什麼技術含量。顯示選單 v...

14 4 執行緒的通訊

執行緒通訊 乙個執行緒完成自己的任務時,就要通知另外乙個執行緒去 例子就是生產者與消費者關係 wait 等待。如果執行緒執行了wait方法,那麼該執行緒會進入等待的狀態 notify 喚醒等待的執行緒 注意 1 wait和notify方法是屬於objeck類的。2 wait和notify方法必須是要...

南陽144 某種序列

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 數列a滿足an an 1 an 2 an 3,n 3 編寫程式,給定a0,a1 和 a2,計算a99 輸入 輸入包含多行資料 每行資料報含3個整數a0,a1,a2 0 a0,a1,a2 100000000 資料以eof結束 輸出...