首先看題目,好傢伙,全英文
那麼大致的題意就是。有幾個城市同在一條線上(相當於在x軸上),max i是第i個城市到其他所有城市的距離中的最大值,min i也就是所有中最小的。
再看輸入
第一行輸入乙個n(2 ≤ n ≤ 105),代表城市數量。第二行有n個數:x
1, x
2, ..., x
n (- 109 ≤ x
i ≤ 109),代表每個城市的橫座標。
看一下輸出
輸出n行,每行輸出兩個數,代表第i個城市到其他所有城市的距離最小值min i、最大值max i。
那麼,這道題是想幹什麼呢?
就是給你n個在x軸上的點,x座標告訴你了,求每個點距離其他點的最小值與最大值。
讀懂了題,那就比較好寫了。
首先讀入每個城市橫座標
for(i=0; i)然後接下來分別求出每個max、min就可以了
for(i=0; i)inf在函式外定義為0x3f3f3f3f,代表無窮大。這裡的思路就是:你要比每個點到其他點的距離,那就先定乙個點,讓這個點與其他的點比較,這就有了上面的內層for迴圈。cout
"}
max初始值為0,min初始值無窮大,定的點初始為第乙個點,把它與第二個點比較,那麼距離為3,而這個3大於初始的max,那新的max就變成了3。3小於初始的min,拿新的min就為3。然後再拿定點和下乙個點比較,距離為7,大於max,故新的max為7,不小於min,故min還是3。以此類推,最後這個定點距其他所有點的min就為3,max就為12。
然後我們就需要設定第二個點、第三個點······為定點來比較了,因此就有了外層的for迴圈。
上面的**中,if判斷裡有i!=j,這是為了避免定點與定點相比,否則相比之後,得出距離為0,那麼最後它的min值就會為0,是錯的。
那麼完整的**奉上(由於用了for巢狀,怕卡時間,就取消了共用緩衝區,**為 intmain()
for(i=0; i)
cout"}
return0;
}如果你提交這段**,那麼恭喜您喜提乙個wa,至於原因我還沒找到。這又是一道英文題,無法找網上的**來借鑑。於是沒辦法,只有再寫咯。其實寫這段找min、max前,我的第乙個思路是,因為這幾個點都是按座標順序排著的,那麼只用在它的位置上花功夫不就ok了嗎。但當時感覺兩個for迴圈找更穩,就沒有細想。
那麼從位置上來,需要考慮的就是兩個東西。
首先。第乙個點,它的max值一定是和最後乙個點的差,min值一定是和第二個點的差。最後乙個點也是這樣,max值是和第乙個點的差,min值是和倒數第二個點的差。
其次。中間的點的min值,一定是和相鄰的點的差,需要找的就是到底是左邊還是右邊。max值一定是和第乙個點或最後乙個點的差。
那麼如何找 到底是左邊還是右邊相鄰點離中間點的距離更小?到底是第乙個還是最後乙個點離中間點距離更大?事實上,把要比較的兩個值直接放入min() max()函式就ok啦。
cout<1]-x[0]<namespace"<1]-x[0]<
for(i=1; i1; i++)
cout
<1],x[i+1]-x[i])<
"<0],x[n-1]-x[i])<
cout
<1]-x[n-2]<
"<1]-x[0]顯而易見,第乙個點和最後乙個點單獨拿出來手動輸出,中間的點,直接比較就ok
完整**
#includeusing
std;
int x[100005
];int
main()
ok ac
記錄一次kernel記憶體洩漏的查詢定位過程
bug定位過程 char wr pr debug begin u8 const data,u32 len,char string char wr pr debug end char string void test 一眼可能不容易看出上面的有什麼問題,有kmalloc,有kfree啊,好像成對出現的...
記錄一次面試
怎麼觀察系統中 記憶體 行為 a.通過 proc zoneinfo 檔案,可以看到 free high low min pages 關係 free high 時候 一般不開啟 kswapd 執行緒 high free low 時,開啟 kswapd 執行緒 low free min時,alloc p...
記錄一次oracle使用記錄
使用oracle資料庫的專案到我這邊,需要修改,咱雖然 學過 oracle,但那畢竟已經過去了。哈哈。使用database configuration assistant 建立資料庫,建立快完的時候,說我沒有監聽啥的,然後 通過 net manager 建立了,qizhong1 其中選中的那個就是建...