計算幾何你瞎暴力 玲瓏oj C語言

2021-08-25 16:52:39 字數 1453 閱讀 9928

problem description

今天h考完了期末考試,他在教學樓裡閒逛,他看著教學樓裡一間間的教室,於是開始思考:

如果從乙個座標為 (x1,y1,z1)的教室走到(x2,y2,z2))的距離為 |x1−x2|+|y1−y2|+|z1−z2|

那麼有多少對教室之間的距離是不超過r的呢?

input

第一行是乙個整數t(1≤t≤10), 表示有t組資料 接下來是t組資料,對於每組資料: 第一行是兩個整數n,q(1≤n≤5×104,1≤q≤103)表示有n間教室, q次詢問. 接下來是n行, 每行3個整數xi,yi,zi(0≤xi,yi,zi≤10)表示這間教室的座標. 最後是q行,每行乙個整數r(0≤r≤109),意思見描述.

output

對於每個詢問r輸出一行乙個整數,表示有多少對教室滿足題目所述的距離關係.

sample input

1 

3 3

0 0 0

1 1 1

1 1 1

1 23

sample output

1

13

hint

對於樣例,1號教室和2號教室之間的距離為3, 1號和3號之間的距離為3, 2號和3號之間的距離為0

題意:在乙個三維空間中有n個點,q次查詢,每次查詢給一距離r,求出三維空間中有多少對點之間的哈密頓距離小於r。

思路:一開始的時候如果按最簡單的想法,先兩兩配對求出每兩個點之間的距離,之後輸出,但是本題中點的數目n的資料較大,如果要全部處理的話需要10^9的複雜度,肯定會超時。這個時候我們觀察後發現,每乙個點的範圍很小,0<=x,y,z<=10,如果我們通過座標來遍歷每乙個點,那麼就只需要10^3的複雜度,顯然更合適。所以本題也是如此,通過以座標為單位的列舉,就可以得到最後的結果:

注釋:哈密頓距離定義是:對於二維平面上的兩點a,b,其座標分別為:

#include #include #include #include int n, q, t, tem;

int a, b, c, i, x, y, z;

long long int aa[35];

long long int d[15][15][15];

int dis(int a, int b, int c, int x, int y, int z)

int main()

for(a = 0; a <= 10; a++)}}

}}}}

}//只列舉x,y,z在範圍內,輸入的每兩個點之間的距離

for(i = 1; i <= 30; i++)

aa[i] /= 2;

for(i = 1; i <= 30; i++)

aa[i] += aa[i-1];

while(q--)

}return 0;

}

玲瓏杯1143 計算幾何你瞎暴力

1143 計算幾何你瞎暴力 time limit 5s memory limit 256mbyte submissions 1735solved 341 description 今天 hhhh考完了期末考試,他在教學樓裡閒逛,他看著教學樓裡一間間的教室,於是開始思考 如果從乙個座標為 x 1,y1 ...

玲瓏oj1143 計算幾何你瞎暴力

1143 計算幾何你瞎暴力 time limit 5s memory limit 256mbyte submissions 1786solved 354 description 今天 hhhh考完了期末考試,他在教學樓裡閒逛,他看著教學樓裡一間間的教室,於是開始思考 如果從乙個座標為 x 1,y1 ...

loj517 計算幾何瞎暴力

在序列上維護4個操作 1.在序列的尾端新增x 2.輸出al ar的和 3.將所有數異或x 4.將序列從小到大排序 第一眼看上去是splay於是頭鐵硬剛了一發 後來發現splay沒法異或 然後看到了trie樹 學習了乙個 1.直接插到序列裡 2.考慮字首和 因為trie樹所管轄的下標區間是有序的,所以...