UVA11343陷阱经验

这个第四次练习我还真是涨姿势了。。。就这么一道叉积题,跟之前的UVA191、378看起来都要简单,可我就在怎么处理数据上卡了半天,,一直没有思路。。。总在想到底以线(两个点)为单位处理还是单个点单个点处理,,这直接导致了我不知道该如何读入这些数据,也就处理不了了。。。然后果断百度看看大牛们的经验,,有了提示,就开始写呀写。。。

一开始提交WA。。。可是样例我都对了啊,,我也注意了大佬们的提示 把二阶矩阵的叉积函数定义为long long返回型了呀。。。又找了半天。。发现了,原来是在调用叉积函数返回的时候数据发生溢出了。。。就是代码里的d1,d2,d3,d4一开始声明为int型出了问题,就这样AC。。。

 

一、数据处理没有经验可依据。。。

二、数据运算导致溢出。。在赋值时又可能溢出。。。

原题地址

点击打开链接

代码贴上。

 

#include <iostream>
#include <cstdio>
using namespace std;
int const Maxn = (100<<1)+3;
struct point{//点结构体
    int  x,y;
    point(int a=0,int b=0) { x=a; y=b;}//给点赋坐标值
}Point[Maxn];

int Count = 0;
int n=0,m=0;

long long det(point p1,point p2,point p3){//二维矩阵
    return ( (p2.x-p1.x)*(p3.y-p1.y) - (p3.x-p1.x)*(p2.y-p1.y));//返回的是向量p1p2与p1p3叉积结果
}
bool onSegment(point p1,point p2,point p3){//利用坐标大小关系判断p3是否在线段p1p2
    if( p3.x>= min(p1.x,p2.x) &&  p3.x<= max(p1.x,p2.x) && p3.y>=min(p1.y,p2.y) && p3.y<= max(p1.y,p2.y))
        return true;
    else
        return false;//p1,p2,p3三点共线
}

bool checkIntersection(point p1,point p2,point p3, point p4){//线在矩形外,判断相交
    long long  d1,d2,d3,d4;
    d1 = det(p3,p4,p1);//p3p4 and p3p1
    d2 = det(p3,p4,p2);//p3p4 and p3p2
//根据叉积几何意义判断两条线段相交知:若d1与d2异号则点p1、p2分居在向量p3p4两侧,即是p1p2与p3p4相交

    d3 = det(p1,p2,p3);//p1p2 and p1p3
    d4 = det(p1,p2,p4);//p1p2 and p1p4
//同理,异号时p3、p4分居向量p1p2
    //cout << d1 << " " << d2 <<" " << d3 << " " << d4 << endl;

    if((d1*d2<0) && (d3*d4<0))
        return true;//Intersecting!
    else if((d1 == 0)&&( onSegment(p3,p4,p1)))//这一行代码说明p1在线段p3p4上,以下同理
        return true;
    else if((d2 == 0)&&( onSegment(p3,p4,p2)))
        return true;
    else if((d3 == 0)&&( onSegment(p1,p2,p3)))
        return true;
    else if((d4 == 0)&&( onSegment(p1,p2,p4)))
        return true;
    else
        return false;
 }

 inline void init(){
     Count = 0;
    int a,b,c,d;
    scanf("%d",&m);
    for(int i=0; i<m; ++i){
        scanf("%d%d%d%d",&a,&b,&c,&d);
        Point[i<<1] = point(a,b);
        Point[(i<<1)+1] = point(c,d);
    }
 }
 inline void solve(point p[], int num){
    bool flag;
    for(int i=0; i<num; ++i){
        flag = false;
        for(int j=0; j<num; ++j){
            if( j==i)
                    continue;
            if( checkIntersection( p[i<<1],p[(i<<1)+1],p[j<<1],p[(j<<1)+1])){
                    flag = true;//有交点,非孤立点,排除
                    break;
            }
        }
        if(!flag)//still flase
            Count++;
    }
 }
 inline void outResult(){
    printf("%d\n",Count);
 }
 int main(){
    scanf("%d",&n);
    while(n--){
        init();
        solve( Point, m);
        outResult();
    }
    return 0;
 }

 

 

2017年03月12日 04:51:30 书

 

 

电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值