本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
在平面直角坐标系中,两点可以确定一条直线。
给定平面上 20 × 2120×21 个整点 {(x, y)|0 ≤ x < 20, 0 ≤ y < 21, x ∈ Z, y ∈ Z}(x,y)∣0≤x<20,0≤y<21,x∈Z,y∈Z,即横 坐标是 00 到 1919 (包含 00 和 1919) 之间的整数、纵坐标是 00 到 2020 (包含 00 和 2020) 之 间的整数的点。
请问这些点一共确定了多少条不同的直线。
#include<bits/stdc++.h>
using namespace std;
struct Point{
double x, y;
};
Point P[22*22];
map<pair<double, double>, int> mp;
int main(){
int cnt = 0;
//初始化:
for(int i = 0; i < 20; i++){
for(int j = 0; j < 21; j++){
P[cnt].x = i;
P[cnt].y = j;
cnt++;
}
}
//特殊直线:
int ans = 20 + 21;
//枚举各种合法直线:
for(int i = 0; i < cnt; i++){
for(int j = 0; j < cnt; j++){
//特殊值省略:
if(P[i].x == P[j].x || P[i].y == P[j].y) continue;
//斜率和截距:
double k = (P[j].y - P[i].y) / (P[j].x - P[i].x);
double b = (P[j].x * P[i].y - P[j].y * P[i].x) / (P[j].x - P[i].x);
if(mp[{k, b}] == 0){
mp[{k, b}] = 1;
ans++;
}
}
}
cout << ans << endl;
return 0;
}