題目描述
給出d維空間的n個點,求曼哈頓距離最大的兩個點的曼哈頓距離。兩個d維的點(x1,x2,…,xd),(y1,y2,…,yd)的曼哈頓距離定義為|x1-y1|+|x2-y2|+…+|xn-yn|。
輸入格式:
第一行兩個整數n,d;
接下來n行,每行d個整數描述乙個點的座標。
【資料規模】
60%的資料,d<=2;
100%的資料,2<=n<=1000000,d<=4。
輸出格式:
輸出最大的曼哈頓距離。
輸入樣例#1:
4 2
2 1
1 4
4 5
5 3輸出樣例#1:
題解:
一維時,|x1 - x2| = max(x1 - x2,x2 - x1)。
二維時,|x1 - x2| + |y1 - y2| = max(x1 - x2 + y1 - y2,x2 – x1 + y1 - y2,x1 - x2 + y2 – y1,x2 – x1 + y2 – y1)。
三維時,……
可以發現,對於d維時的兩個點(x1,x2,…,xd)和(y1,y2,…,yd),將它們對應的絕對值去掉,那麼就要分xi – yi 和yi – xi 進行討論。如果xi的符號是正的,那麼yi的符號就是負的;反之亦然。故可以列舉每一維的x的符號,用01表示,那麼對應的y的符號也隨之確定。假設我們列舉答案中x的01情況,然後y的01情況也確定,需要做的就是從所有的點中求出按照x的01情況得到的最大值,按照y的01情況得到的最大值,然後兩者相加就是在這種情況下的最優值,最後對於所有的可能情況取個最大值即可。
時間複雜度:列舉乙個點在最後答案中每一維座標的01(正負)情況的效率為o(2d),然後對於一種情況我們要從所有點中算出乙個符合這種情況的最大值,效率為o(nd),故總的時間複雜度為o(2d*nd)。
空間複雜度:o(nd)
**
#include
#define f( i,a,b ) for( int i=( a );i<=( b );i++ )
#define f_2( i,a,b ) for( int i=( a );i>=( b );i++ )
#define n 1000001
#define m 10001
#define p 1000000007
#define ll long long
#define oo 0x7fffffff
using namespace std;
int read()
while( ch>='0' && ch<='9' )
return f*s;
}int n,d;
int tot,ans,cnt;
int a[n][5];
int m[21];
int s[5];
int lab;
void fun( int dep,int k )
return;
}f( i,0,1 )
fun( dep+1,i );
}int main()
fill( m+1,m+20,-oo );
fun( 0,0 );
int b=1;
f( i,1,d-1 )
b*=2;
f( i,1,b )
ans=max( ans,m[i]+m[2*b-i+1] );
cout<}
倒水(rms2017模擬2 1) 推理
倒水 water.cpp 試題描述 某一天,在 nh 學習 cs 的 zr 習得新的 acm 秘籍,驚奇的發現,每使用一次會額外 得到乙個容量無限大的瓶子,並且初始時每個瓶子裡有 1 公升水。當他一口氣使用了 n 次秘 籍後發現瓶子實在太多了,於是他決定保留不超過 k 個瓶子。規則是每次選擇兩個當前...
轉移RMS模擬器
在powershell中識別當前 rms 模擬器 get scomrmsemulator 移至另乙個管理伺服器 首先將乙個新的rms模擬器管理指定為乙個變數 ms get scommanagementserver name set scomrmsemulator ms 刪除rms模擬器 remove...
模擬推理題練習
2006.8.28 16 44 1.岳飛 秦檜 a.秦瓊 尉遲恭b.諸葛亮 劉伯溫 c.楊廣 楊堅d.紀曉嵐 和紳 2.黃巾起義 蒼天已死,黃天當立 a.大澤鄉起義 王侯將相,寧有種乎?b.黃巢起義 天子當兵強馬壯者為之!c.金田起義 均貧富,等貴賤。d.紅巾起義 天下多男子,皆兄弟之輩 3.剪刀 ...