weinan030416

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

pair去重

给定平面上 20×2120×21 个整点 (�,�)∣0≤�<20,0≤�<21,�∈�,�∈�(x,y)0x<20,0y<21,xZ,yZ,即横 坐标是 00 到 1919 (包含 00 和 1919) 之间的整数、纵坐标是 00 到 2020 (包含 00 和 2020​) 之 间的整数的点。

请问这些点一共确定了多少条不同的直线。

复制代码
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
struct Point{
    double x, y;
}p[25*25];//存下每一个点
map<pair<double,double>,int> mp;//存斜率k和截距b,int判断是否重复 
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;
        }
    }
    int ans = 20 + 21;
    for(int i = 0;i < cnt;i++){
        for(int j = 0;j < cnt;j++){
            //两点的直线与坐标轴平行或共点,需要先排除掉,因为不能除以0 
            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}] = 10;
                ans++;
            }
        }
    }
    cout << ans << endl;
    return 0;
}
//40257
复制代码

 

posted on   楠030416  阅读(26)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示