問題描述
倫倫剛剛在高中學習了解析幾何,學會了計算兩條直線的交點。這天,老師給她布置了一道作業。在平面上有 n 條直線,他們之間有若干交點。給定一對平板(兩條平行的直線),問這有多少對直線,他們的交點在這一對平板之間(注意 (i, j) 和 (j, i) 只算一對)。
輸入格式
第一行三個整數 k,a,b 表示平板的兩條平行直線的方程為 y=kx+a 和 y=kx+b,保證 a
輸出格式
乙個整數,表示有多少對直線,他們的交點在平板之間。
樣例輸入
0 3 50
51 0
2 0-1 0
-2 0
-1 10
樣例輸出3
題解:
本題是逆序對的基本應用。
我們要用到以下觀察,若兩條直線的交點在平板內部。則他們與下方平板和上方平板的交點橫座標大小關係相反。
這表明,如果將所有直線按照他們與下方平板的交點的橫座標排序,將他們上方平板交點的橫座標作為關鍵字。則平板內交點個數等於在排序後的序列中關於關鍵字的逆序對個數.
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef double db;
const int maxn=100001;
int res=0,n,k,a,b;
struct line
else
}while(i<=mid)
while(j<=r)
for(int ptr=l;ptr<=r;ptr++) }
void merge_sort(int l,int r)
}int main()
stable_sort(data+1,data+1+n);
merge_sort(1,n);
printf("%d",res);
return 0;
}
求兩直線的交點
一般方程法 直線的一般方程為f x ax by c 0。既然我們已經知道直線的兩個點,假設為 x0,y0 x1,y1 那麼可以得到a y0 y1,b x1 x0,c x0y1 x1y0。因此我們可以將兩條直線分別表示為 f0 x a0 x b0 y c0 0,f1 x a1 x b1 y c1 0 ...
計算直線的交點數
time limit 1 sec memory limit 64 mb submit 820 solved 518 平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個...
OJ 計算直線的交點數
平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個正整數n n 20 n表示直線的數量。每個測試例項對應一行輸出,從小到大列出所有相交方案,其中每個數為可能的交點數,...