XDOJ 萬神的線段 過載運算子

2021-07-11 14:04:23 字數 1240 閱讀 7211

一天,萬神閒著無聊,畫了 n 條線段。第 i 條線段有兩個端點 (xi0,yi0), (xi1,yi1)。 因為被杜神坑過,萬神非常討厭浮點精度問題,因此這些端點的座標都是整 數。 萬神希望知道,有多少對線段互相平行,或者在同一條直線上(部分或全部 重合也算同一條直線上)

輸入包含多組資料,請處理到檔案結束。 每組資料,第一行包含乙個整數 n。 之後 n 行,每行 4 個整數,表示 xi0,yi0,xi1,yi1。 保證 1 ≤ n ≤ 100000,各個座標是絕對值在 109 以內的整數。 保證線段的長度不是 0。

對於每組資料輸出 1 行,包含 1 個整數,即平行或共線的線段對數。

3 0 0 1 0

1 0 1 1

0 0 1 1

4 0 0 1 1

2 2 3 3

1 2 3 4

2 3 3 30 3

對於第二組樣例,第 1 條線段與第 2 條共線,與第 3 條平行,第 2 條線段 與第 3 條平行

找出斜率相同的線段,然後計算可以組合出多少對。

斜率可能出現小數,怕卡精度,就轉換成乘法計算y\x < y1\x1 將其轉換為y * x1 < x * y1 要注意的是 x1與x可能為負 就要導致變號情況的發生,所以直接全部直接取正值,值得注意,y的正負是不影響符號變化的

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxn 1005

#define inf 1e9+7

#define ll long long

#define eps 1e-6

#define maxv 50

using

namespace

std;

struct qz

};qz a[100005];

int main()

}ll ans=0;

ll ant=1;

sort(a,a+n);

for(int i=0;i1;i++)

}if(a[n-1]==a[n-2])ans+=(ant-1)*ant/2;

printf("%lld\n",ans);

}return

0; }

過載運算子

題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...

過載運算子

include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...

過載運算子

1.當乙個過載的運算子是成員函式時,this繫結到左側運算物件。成員運算子函式的引數比運算物件的數量少乙個。非成員函式呼叫等價於 data1 data2 普通表示式 operator data1,data2 等價的函式呼叫成員函式呼叫等價於 data1 data2 普通表示式 data1.opera...