HUST 1376 Random intersection
神题。同学指教。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的更多相关文章
- [Linked List]Intersection of Two Linked Lists
Total Accepted: 53721 Total Submissions: 180705 Difficulty: Easy Write a program to find the node at ...
- codeforces 478B Random Teams
codeforces 478B Random Teams 解题报告 题目链接:cm.hust.edu.cn/vjudge/contest/view.action?cid=88890#probl ...
- 【2019.6.2】python:json操作、函数、集合、random()等
一.json操作: json就是一个字符串,从文件中读取json,必须是json格式.j'son串中必须是双引号,不能有单引号,单引号不能转换 1.1使用: import json #使用json先引 ...
- Chrome V8引擎系列随笔 (1):Math.Random()函数概览
先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...
- Math.random()
Math.random() 日期时间函数(需要用变量调用):var b = new Date(); //获取当前时间b.getTime() //获取时间戳b.getFullYear() //获取年份b ...
- .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数
.Net中我们通常使用Random类生成随机数,在一些场景下,我却发现Random生成的随机数并不可靠,在下面的例子中我们通过循环随机生成10个随机数: ; i < ; i++) { Rando ...
- 随机数(random)
需求 Random rd=new Random(); 需要十以内的随机数 (0---10) System.out.println((int)((rd.nextDouble()*100)/10)); ...
- python写红包的原理流程包含random,lambda其中的使用和见简单介绍
Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...
- [LeetCode] Random Pick Index 随机拾取序列
Given an array of integers with possible duplicates, randomly output the index of a given target num ...
随机推荐
- 扫描局域网内的ip和主机名
1. 目的 今天发现我配置的一台电脑ip被人占用了,所以准备写个程序扫描一下局域网内所有正在使用的ip和主机名 2. 实现--直接上代码 import time import threading im ...
- windows下编译Android版本的boost库文件
1.起因: 手上有一个用到了boost的asio库和thread库的工程要编译到手机上(Android版本和ios版本),本文只介绍如何编译到Android版本,ios版本之后再介绍,也许就不介绍了( ...
- static方法与非static方法是否可以互相调用
情况一.static方法调用非static方法 非静态方法只有实例对象才可调用,而静态方法随着类的加载而加载,类的加载在实例对象产生之前,所以静态方法不能调用非静态方法 情况二.非atic方法调用st ...
- hdu 4463 Outlets(最小生成树)
Outlets Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submi ...
- CodeForces 567B Berland National Library
Description Berland National Library has recently been built in the capital of Berland. In addition, ...
- 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 ...
- 上传Android或Java库到Maven central repository(转载)
主要介绍利用Sonatype将jar或aar提交到Maven的中央仓库. 是不是希望将自己的jar或是aar传到maven官方库中,在The Central Repository中可以被其他人搜索使用 ...
- aspx基础开始
<%@ Page Language="C#" Debug="true" trace="false" validateRequest=& ...
- java项目开发第五天——奋力完成数据库
又一次成功地避开了UI界面,看来以后在这个部分得残了,无奈,心塞,不知为何.今天人品不好,大清早在群里签到居然和机器人聊起来了,顿时感觉智商被碾压,还下载了一个QQ空间背景复制器,看了看果真是实现了, ...
- HDFS在Linux下的命令
1.对hdfs操作的命令格式是 1.1hadoop fs -ls <path> 表示对hdfs下一级目录的查看 1.2 hadoop fs -lsr <path> 表示对hd ...