士兵站隊問題

2021-10-02 21:15:23 字數 836 閱讀 5541

問題描述:

在乙個劃分成網格的操場上,n個士兵散亂地站在網格點上,網格點由整數座標(x,y)表示。士兵們可以沿網格邊上、下、左、右移動一步,但在同一時刻任一網點上只能有一名士兵。按照軍官的命令,士兵們要整齊地列成乙個水平佇列,即排列成(x,y),(x+1,y),...,(x+n,y)。如何選擇x和y的值才能使士兵們以最少的總移動步數排成一列。

程式設計任務:

計算使所有士兵排成一行需要的最少移動步數。

輸入格式:

由檔案sol.in提供輸入資料。檔案的第1行是士兵數n,1<=n<=10000。接下來n行是士兵的初始位置,每行2個整數x和y,-10000<=x,y<=10000。

輸出格式:

程式執行結束時,將計算結果輸出到檔案sol.out中。檔案的第一行中的數是士兵排成一行需要的最少移動步數。

#include#includeusing namespace std;

//士兵站隊問題

int main()

//先計算y的最小移動步數

sort(b,b+n);//按公升序排序,找出中位數

int miny=0;

for(int i=0;i//計算x的最少移動步數

sort(a,a+n);//先排序

int minx=0;

for(int i=0;isort(a,a+n);//找出中位數

for(int i=0;iint min=minx+miny;

cout<<"最少移動步數為:"

士兵站隊問題

題解 首先已知縱向移動可以直接通過求中位數得到 那麼問題就是橫方向移動了 我們假設第一位士兵站的位置是k,因為x從x1開始,那麼我們假設成起始位置為k 1吧 不懂接著看完你就懂了 那麼 第二位士兵的位置是 k 2,接著是k 3,k 4,k n 所以,士兵橫向 即平行於y軸方向 移動的距離為 x1 k...

9209 士兵站隊問題

time limit 10 second memory limit 2 mb 問題描述 在乙個劃分成網格的操場上,n個士兵散亂地站在網格點上。網格點由整數座標 x,y 表示。士兵們可以沿網格邊上 下 左 右移動一步,但在同一時刻任一網格點上只能有一名士兵。按照軍官的命令,士兵們要整齊地列成乙個水平佇...

2 2 9 士兵站隊問題

9 士兵站隊問題 問題描述 在乙個劃分成網格的操場上,n個士兵散亂地站在網格點上。網格點由整數座標 x,y 表示。士兵們可以沿網格邊上 下 左 右移動一步,但在同一時刻任一網格點上只能有一名士兵。按照軍官的命令,士兵們要整齊地列成乙個水平佇列,即排列成 x,y x 1,y x n 1,y 如何選擇x...