蓝桥杯:2021省赛 例题:直线

简介: 蓝桥杯:2021省赛 例题:直线

21e5eb6849ca419693e2431a9835668e.png

e0b2e2b49bb6463e905126986d0c77a5.png

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

在平面直角坐标系中,两点可以确定一条直线。


给定平面上 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;
}
相关文章
|
存储 算法
蓝桥杯:递归 与 例题:斐波那契数列及优化与应用
蓝桥杯:递归 与 例题:斐波那契数列及优化与应用
79 0
蓝桥杯:递推 例题:数字三角型问题
蓝桥杯:递推 例题:数字三角型问题
58 0
|
移动开发 Shell
蓝桥杯:2020 国赛 例题:天干地支
蓝桥杯:2020 国赛 例题:天干地支
76 0
蓝桥杯:2019 国赛 例题:求值
蓝桥杯:2019 国赛 例题:求值
72 0
蓝桥杯:桶排序 与 例题:算式问题
蓝桥杯:桶排序 与 例题:算式问题
84 0
蓝桥杯:Map 和 例题:弗里的语言
蓝桥杯:Map 和 例题:弗里的语言
61 0
蓝桥杯:队列 Queue 和 例题: CLZ 的银行
蓝桥杯:队列 Queue 和 例题: CLZ 的银行
63 0
蓝桥杯:vector 与 例题:快递分拣
蓝桥杯:vector 与 例题:快递分拣
82 0
|
机器学习/深度学习
蓝桥杯:栈 和 例题 :小邋遢的衣橱
蓝桥杯:栈 和 例题 :小邋遢的衣橱
127 0
蓝桥杯:2021省赛 例题:时间显示
蓝桥杯:2021省赛 例题:时间显示
61 0