某桥杯一道关于直线条数坑人的的问题记录

发布于 2021-12-01  354 次阅读


先上题面


思路很简单,妈的!!!!

#include<iostream>
#include<string.h>
#include<vector>
#include<math.h>
using namespace std;
typedef struct linenode
{
    double k,b;
    int type;//1是有斜率的,2是没斜率的
}line;
vector< line >map;
typedef struct node
{
    int x;
    int y;
} point;
vector< point >pointlist;
int main(){
    int xnum=20,ynum=21;
    for (int i=0;i<xnum;i++){
        for (int j=0;j<ynum;j++){
            point a;
            a.x=i;
            a.y=j;
            pointlist.push_back(a);
        }
    }
    for (int i=0;i<pointlist.size();i++){
        for(int j=0;j<pointlist.size();j++){
            point a=pointlist[i];
            point b=pointlist[j];
            line temp;
            double fm=(a.x-b.x)*1.0;
            if(fm==0){
                temp.k=0;
                temp.b=a.x;
                temp.type=2;
            }else{
                temp.k=((a.y-b.y)*1.0)/fm;
                temp.b=a.y*1.0-temp.k*(a.x*1.0);
                temp.type=1;
            }
            int flag=1;
            for (int k=0;k<map.size();k++){
                line temp1=map[k];
                if(fabs(temp1.k-temp.k)<1e-6&&fabs(temp1.b-temp.b)<1e-6&&temp.type==1&&temp1.type==1){
                    flag=0;
                    break;
                }else if(temp.type==2&&temp1.type==2&&temp1.b==temp.b){
                    flag=0;
                    break;
                }
            }
            if(flag==1){
                map.push_back(temp);
                if(temp.type==1){
                    cout<<"y="<<temp.k<<"x+"<<temp.b<<" \t\t("<<a.x<<","<<a.y<<")("<<b.x<<","<<b.y<<")"<<endl;
                }else{
                    cout<<"x="<<temp.b<<"\t\t("<<a.x<<","<<a.y<<")("<<b.x<<","<<b.y<<")"<<endl;
                }
            }
        }
    }
    cout<<map.size();
}

问题出在45行,懂的都懂


不会写珂朵莉树的废柴ACMer