今天起開始進攻計算幾何題目~
第一題……rumtime了2次(某變數下標出錯),wa了1次(輸出排序出錯……)鬱悶,我明明都已經很仔細檢查**了。
題目貌似有點長,我稍微解釋一下。
題意是在乙個箱子裡面加n個木板把箱子隔成幾個空間,之後有m個玩具隨機落入這幾個空間裡面。(木板不相交)
最後統計有t個玩具的空間有多少個(t>0)
題解:由於題目說了木板不相交的,所以直接根據木板上面或下面的x座標排序就可以得到從左到右的 空間的 右邊木板的座標。
為了遍歷方便,我們直接將箱子左邊界作為第乙個木板,箱子右邊界作為第二個木板,之後對m中的每乙個點進行一次遍歷尋找其所在子區間就可以。
統計完之後就是為了按要求輸出對資料進行一些處理。不多解釋。
[cpp]view plain
copy
#include
#include
#include
#include
#include
using
namespace
std;
const
intmx = 2000;
struct
po
}point[mx];
intcross(po o, po p)
//叉乘
intcheck(po p,
intnum)
//查詢某一點在哪乙個子區間
} struct
pa//用於處理最後輸出的結構體
}sec[mx];
intbox[mx];
//統計子空間有多少玩具的陣列
intmain()
sort(point+1, point+1+n);
point[0].x1 = point[0].x2 = l.x1;//左邊界作為第一塊木板
point[0].y1 = l.y1;
point[0].y2 = r.y1;
point[n+1].x1 = point[n+1].x2 = r.x1;//右邊界作為最後一塊木板
point[n+1].y1 = l.y1;
point[n+1].y2 = r.y1;
po a;
for(
inti=1; i<=m; i++)
intnum = 0;
for(
inti=0; i<=n; i++)
} sort(sec+1, sec+m);
printf("box\n"
);
for(
inti=1; i<=num; i++)
} return
0;
}
叉積判斷點在多邊形內外 poj2318
計算幾何中長遇到的問題 判斷特定點是否在平面多邊形內部。向量叉積是一種方法,用於凸多邊形。優角 角度值大於180度小於360度。凸多邊形 沿著多邊形的一邊做一條直線,如果剩下所有的部分都在直線的同側,那麼稱這是乙個凸多邊形,凸多邊形是沒有優角的 判斷 連線第i條邊的第乙個端點和測試點成向量u,再連線...
叉積判斷線段 直線相交 POJ3304
給你n個線段的兩端座標 問是否存在一條直線 所有線段在這條直線上的投影有共同點 存在一條直線 所有線段在這條直線上的投影有共同點 有一條線能穿過所有線段 這兩條直線剛好 暴力列舉所有端點 直線與線段相交 叉積 判斷一次就夠啦 線段與線段相交 twice include include include...
poj3304(叉積判斷直線和線段相交)
題意 求是否能找到一條直線,使得n條線段在該直線的投影有公共點。思路 如果存在這樣的直線,那麼在公共投影點作直線的垂線,顯然該垂線會經過所有直線,那麼原題轉換為求是否有經過所有線段的直線。如果存在這樣的直線,那麼該直線一定能通過平移和旋轉之後經過所有線段中的兩個端點,那麼我們列舉所有兩兩線段的端點作...