51nod1369 无穷印章
提示:下图给出一些印章图案以及它们对应的结果。

多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5
每组测试数据有相同的结构构成。
每组数据的第一行包含一个整数N,表示印章中的线段条数,其中1<=N<=50
接下来N行每行四个整数ai,bi,ci,di,表示一条线段的两个端点(ai,bi)与(ci,di),其中-1000<=ai,bi,ci,di<=1000
每组数据一行输出,存在无穷个印章的盖法输出"Infinite",否则输出"Finite".
这题卡精度。。。最好不要用浮点数。。。
#include<cstdio>
#include<algorithm>
struct vec{
int x,y;
void fix(){
if(y<||y==&&x<)x=-x,y=-y;
}
};
vec operator+(vec a,vec b){return (vec){a.x+b.x,a.y+b.y};}
vec operator-(vec a,vec b){return (vec){a.x-b.x,a.y-b.y};}
int operator*(vec a,vec b){return a.x*b.y-a.y*b.x;}
bool operator==(vec a,vec b){return a.x==b.x&&a.y==b.y;}
struct seg{
vec a,b;
void scan(){
scanf("%d%d%d%d",&a.x,&a.y,&b.x,&b.y);
}
void swap(){
std::swap(a,b);
}
bool isp(){
vec c=a-b;
return !(c.x|c.y);
}
}ss[];
int ep,sum,cnt;
int sgn(int x){
return x>?:x<?-:;
}
bool cross(seg a,seg b){
return
sgn((b.a-a.a)*(a.b-a.a))*sgn((b.b-a.a)*(a.b-a.a))+
sgn((a.a-b.a)*(b.b-b.a))*sgn((a.b-b.a)*(b.b-b.a))<;
}
bool pal(seg a,seg b){
return (a.b-a.a)*(b.b-b.a)==;
}
struct event{
vec x;int v;
}es[];
bool operator<(event a,event b){
int c=a.x*b.x;
return c?c>:a.v<b.v;
}
void chk(seg a,seg b){
if(a.a==b.b)b.swap();
if(a.b==b.a)a.swap();
if(a.b==b.b)a.swap(),b.swap();
if(a.a==b.a){
vec p1=a.b-a.a,p2=b.b-b.a;
if(p1*p2<)std::swap(p1,p2);
p1.fix();p2.fix();
if(p1*p2<)++sum;
++cnt;
es[ep++]=(event){p1,};
es[ep++]=(event){p2,-};
}
}
int T,n;
int main(){
scanf("%d",&T);
while(T--){
ep=;sum=cnt=;
scanf("%d",&n);
for(int i=;i<n;i++)ss[i].scan();
int is=;
for(int i=;i<n;i++)for(int j=;j<i;j++){
if(ss[i].isp()||ss[j].isp())continue;
if(pal(ss[i],ss[j]))continue;
if(cross(ss[i],ss[j])){
is=;
i=n;
break;
}
chk(ss[i],ss[j]);
}
if(is){
std::sort(es,es+ep);
for(int i=;i<ep;i++){
if((sum+=es[i].v)==cnt){
is=;
break;
}
}
}
puts((is==||is==&&!cnt)?"Infinite":"Finite");
}
return ;
}
51nod1369 无穷印章的更多相关文章
- C#如何在PDF文件添加图片印章
文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性.C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF,向大家阐述 ...
- ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug
Microsoft最近发布了ASP.NET Identity 2,该版本支持双重认证.帐号锁定以及防伪印章功能,还增强了用户帐号和索引.此外新版本还包含一个改进的密码验证器并修复了一些bug. 借助于 ...
- python的正负无穷float("inf")的用法
今天,在看书的时候看到这么一个例子: 这是用来求解 从某个数字列表中找出俩个彼此最接近但是不相等的数(俩者之间的绝对差是最小的): >>> from random import ra ...
- Scalaz(50)- scalaz-stream: 安全的无穷运算-running infinite stream freely
scalaz-stream支持无穷数据流(infinite stream),这本身是它强大的功能之一,试想有多少系统需要通过无穷运算才能得以实现.这是因为外界的输入是不可预料的,对于系统本身就是无穷的 ...
- 无穷滚动(Infinite scroll)的实现原理
1 无穷滚动(无限加载)与分页的比较 现在越来越多的网站或者博客的列表页开始抛弃传统的分页技术,大致的原因在于,分页明显地增加了用户的操作行为以及页面加载等待的时间,而网页浏览者往往没什么耐心. 而无 ...
- 泛函编程(13)-无穷数据流-Infinite Stream
上节我们提到Stream和List的主要分别是在于Stream的“延后计算“(lazy evaluation)特性.我们还讨论过在处理大规模排列数据集时,Stream可以一个一个把数据元素搬进内存并且 ...
- JavaScript和html5 canvas生成圆形印章
代码: function createSeal(id,company,name){ var canvas = document.getElementById(id); var context = ca ...
- html5 canvas绘制圆形印章,以及与页面交互
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Python 关于正负无穷float(‘inf’)的一些用法
Python中可以用如下方式表示正负无穷: float("inf"), float("-inf") 利用 inf 做简单加.乘算术运算仍会得到 inf > ...
随机推荐
- 蓝牙(Profile)构成
蓝牙剖面(Profile)构成 蓝牙剖面(Profile)及其相互关系 蓝牙SIG定义13种蓝牙剖面及其相互关系如下图: 一个剖面若直接或间接采用了另一个剖面的部分或全部功能则称该剖面依赖于另一剖面. ...
- 合并两个有序数组a和b到c
问题:两个有序数组a和b,合并成一个有序数组c. // 合并两个有序数组a和b到c void Merge_Array(int a[], int n, int b[], int m, int c[]) ...
- pthread的线程安全性
pthread不一定能够保证线程安全性,特别是在开启编译器优化的情况下,某些编译器优化很可能破坏pthread的线程安全性. 由于不同的编译器可能有不同的优化技术,所以pthread的实现与编译器有很 ...
- ZOJ 1001 A + B Problem
熟悉ZOJ环境,如何上传代码,如何查看结果. #include<iostream> using namespace std; int main(){ int a,b; while(cin& ...
- ASP.NET Web API与Rest web api:发布到IIS(二)(同发布.NET webservice)
本文档大部分来源于:http://www.cnblogs.com/zqzjs/p/4705994.html 工具VS2010,window环境win7 一:Webservice的创建与方法查看调用 1 ...
- Codeforces 106 C 多重背包
题目链接:http://codeforces.com/problemset/problem/106/C 根据题意列出式子,设每种蛋糕做了xi个,则对于每种材料bi*xi<=ai. 对于dough ...
- 关于Toad连接DB2的sqlstate=08001错误
新装的centos6.3+db29.7,数据库导入完了的之后用Toad连接访问之的时候出错了. DB2 Database Error: ERROR [08001] [IBM] SQL30081N A ...
- JavaWeb学习记录(十九)——开发JSTL自定义标签
一.防盗链标签 import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspException;import j ...
- hdu1213 并查集
题意:有 n 个朋友,他们可能相互认识,A 认识 B,B 认识 C,则 ABC 相互认识,现在给出他们的认识情况,相互认识的人坐一桌,否则需要分开坐,问至少需要多少桌. 其实就是问并查集的个数,在初始 ...
- jQuery 鼠标滚轮插件应用 mousewheel
jQuery Mousewheel Plugin,用于添加跨浏览器的鼠标滚轮支持. mousewheel事件的处理函数有一点小小的变化,它除了第一个参数event 外,还接收到第二个参数delta. ...