神题。同学指教。1秒AC。。。http://blog.csdn.net/jtjy568805874/article/details/50724656

#include<cstdio>
#include<cstring>
#include<ctime>
#include<algorithm>
using namespace std; const int maxn = + ;
struct point
{
double x;
double y;
int id;
}p[ * maxn];
struct Line
{
int a;
int b;
}line[maxn];
int T, n, tot;
int flag[maxn]; bool cmp(const point&a, const point&b)
{
if (a.x == b.x) return a.y < b.y;
return a.x < b.x;
} const double eps = 1e-;
#define zero(x)(((x)>0?(x):(-x))<eps) double xmult(point p1, point p2, point p0)
{
return (p1.x - p0.x)*(p2.y - p0.y) - (p2.x - p0.x)*(p1.y - p0.y);
} int dots_inline(point p1, point p2, point p3)
{
return zero(xmult(p1, p2, p3));
} int same_side(point p1, point p2, point l1, point l2)
{
return xmult(l1, p1, l2)*xmult(l1, p2, l2)>eps;
} int dot_online_in(point p, point l1, point l2)
{
return zero(xmult(p, l1, l2)) && (l1.x - p.x)*(l2.x - p.x)<eps && (l1.y - p.y)*(l2.y - p.y)<eps;
} int intersect_in(point u1, point u2, point v1, point v2)
{
if (!dots_inline(u1, u2, v1) || !dots_inline(u1, u2, v2)) return !same_side(u1, u2, v1, v2) && !same_side(v1, v2, u1, u2);
return dot_online_in(u1, v1, v2) || dot_online_in(u2, v1, v2) || dot_online_in(v1, u1, u2) || dot_online_in(v2, u1, u2);
} int main()
{
scanf("%d", &T);
while (T--)
{
long long ans = ;
scanf("%d", &n); tot = ; memset(flag, , sizeof flag);
for (int i = ; i <= n; i++)
{
scanf("%lf%lf", &p[tot].x, &p[tot].y); p[tot].id = i; tot++;
scanf("%lf%lf", &p[tot].x, &p[tot].y); p[tot].id = i; tot++;
}
sort(p, p + tot, cmp);
for (int i = ; i < tot; i++)
{
if (!flag[p[i].id])
{
flag[p[i].id] = ;
line[p[i].id].a = i;
}
else
{
line[p[i].id].b = i;
p[i].id = -p[i].id;
}
} for (int i = ; i < tot; i++)
{
if (p[i].id>)
{
int j;
for (j = i + ; p[j].id != -p[i].id; j++)
{
if (p[j].id > )
{
if (intersect_in(p[line[p[i].id].a], p[line[p[i].id].b], p[line[p[j].id].a], p[line[p[j].id].b])) ans++;
}
} for (;; j++)
{
if (j+<tot&&p[j].x == p[j + ].x&&p[j].y == p[j + ].y)
{
if (p[j+].id>)
if (intersect_in(p[line[p[i].id].a], p[line[p[i].id].b], p[line[p[j+].id].a], p[line[p[j+].id].b])) ans++;
}
else break;
}
} }
printf("%lld\n", ans);
}
return ;
}

HUST 1376 Random intersection的更多相关文章

  1. [Linked List]Intersection of Two Linked Lists

    Total Accepted: 53721 Total Submissions: 180705 Difficulty: Easy Write a program to find the node at ...

  2. codeforces 478B Random Teams

    codeforces   478B  Random Teams  解题报告 题目链接:cm.hust.edu.cn/vjudge/contest/view.action?cid=88890#probl ...

  3. 【2019.6.2】python:json操作、函数、集合、random()等

    一.json操作: json就是一个字符串,从文件中读取json,必须是json格式.j'son串中必须是双引号,不能有单引号,单引号不能转换 1.1使用: import json #使用json先引 ...

  4. Chrome V8引擎系列随笔 (1):Math.Random()函数概览

    先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...

  5. Math.random()

    Math.random() 日期时间函数(需要用变量调用):var b = new Date(); //获取当前时间b.getTime() //获取时间戳b.getFullYear() //获取年份b ...

  6. .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    .Net中我们通常使用Random类生成随机数,在一些场景下,我却发现Random生成的随机数并不可靠,在下面的例子中我们通过循环随机生成10个随机数: ; i < ; i++) { Rando ...

  7. 随机数(random)

    需求 Random rd=new Random(); 需要十以内的随机数  (0---10) System.out.println((int)((rd.nextDouble()*100)/10)); ...

  8. python写红包的原理流程包含random,lambda其中的使用和见简单介绍

    Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...

  9. [LeetCode] Random Pick Index 随机拾取序列

    Given an array of integers with possible duplicates, randomly output the index of a given target num ...

随机推荐

  1. 扫描局域网内的ip和主机名

    1. 目的 今天发现我配置的一台电脑ip被人占用了,所以准备写个程序扫描一下局域网内所有正在使用的ip和主机名 2. 实现--直接上代码 import time import threading im ...

  2. windows下编译Android版本的boost库文件

    1.起因: 手上有一个用到了boost的asio库和thread库的工程要编译到手机上(Android版本和ios版本),本文只介绍如何编译到Android版本,ios版本之后再介绍,也许就不介绍了( ...

  3. static方法与非static方法是否可以互相调用

    情况一.static方法调用非static方法 非静态方法只有实例对象才可调用,而静态方法随着类的加载而加载,类的加载在实例对象产生之前,所以静态方法不能调用非静态方法 情况二.非atic方法调用st ...

  4. hdu 4463 Outlets(最小生成树)

    Outlets Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submi ...

  5. CodeForces 567B Berland National Library

    Description Berland National Library has recently been built in the capital of Berland. In addition, ...

  6. ubuntu 12.04 安装snort acidbase相关注意事项

    一.安装Snort 1.安装libpcap 1 apt-get install libpcap-dev 2.安装snort 1 2 apt-get install snort apt-get inst ...

  7. 上传Android或Java库到Maven central repository(转载)

    主要介绍利用Sonatype将jar或aar提交到Maven的中央仓库. 是不是希望将自己的jar或是aar传到maven官方库中,在The Central Repository中可以被其他人搜索使用 ...

  8. aspx基础开始

    <%@ Page Language="C#" Debug="true" trace="false" validateRequest=& ...

  9. java项目开发第五天——奋力完成数据库

    又一次成功地避开了UI界面,看来以后在这个部分得残了,无奈,心塞,不知为何.今天人品不好,大清早在群里签到居然和机器人聊起来了,顿时感觉智商被碾压,还下载了一个QQ空间背景复制器,看了看果真是实现了, ...

  10. HDFS在Linux下的命令

    1.对hdfs操作的命令格式是 1.1hadoop fs  -ls <path> 表示对hdfs下一级目录的查看 1.2 hadoop fs -lsr <path> 表示对hd ...