HDU 1558
输入线段的两个短点,如果线段相交那么他们属于一个集合,查看第i条线段所在的集合有几条线段。
好久没码码了,总是各种蠢。
首先找出两条直线的方程,求解相交点的横坐标,然后看是不是在线段内部。
没有注意题目中从1开始数,我自己写的从0开始数,各种wa。
同时,又受到了杭电的输出大坑(between和fllowed两种不同!!)
#include<iostream>
#include<stdio.h>
using namespace std;
struct po
{
double lx,ly,rx,ry,k,b;//线段左端点和右端点的坐标,斜率,截距
bool ok;//ok为1表示斜率存在,否则不存在
};
po me[];
int li[];
int num[];
void init(int a)
{
int i;
for(i=;i<=a;i++)
{
li[i]=i;
num[i]=;
}
}
int findme(int a)
{
if(a!=li[a])
return li[a]=findme(li[a]);
return li[a];
}
int main()
{
int t,i,j,n,k,tmp,w,tmpk,tmpw;
double tmp1,tmp2,tmp3,tmp4,tmpx;
char typ;
while(scanf("%d",&t)!=EOF)
{
getchar();
for(i=;i<=t;i++)
{
scanf("%d",&n);
init(n);
getchar();
k=;
for(j=;j<n;j++)
{
scanf("%c",&typ);
if(typ=='P')
{
scanf("%lf%lf%lf%lf",&tmp1,&tmp2,&tmp3,&tmp4);
me[k].ok=;
if(tmp1<tmp3)
{
me[k].lx=tmp1;
me[k].ly=tmp2;
me[k].rx=tmp3;
me[k].ry=tmp4;
}
else
{
me[k].lx=tmp3;
me[k].ly=tmp4;
me[k].rx=tmp1;
me[k].ry=tmp2;
}
if(me[k].lx==me[k].rx)
{
me[k].ok=;
}
else
{
me[k].k=(me[k].ly-me[k].ry)/(me[k].lx-me[k].rx);
me[k].b=me[k].ly-me[k].k*me[k].lx;
}
for(w=k-;w>=;w--)
{
tmpk=findme(k);
tmpw=findme(w);
if(tmpk!=tmpw)
{
if(me[k].ok&&me[w].ok)
{
tmpx=(me[k].b-me[w].b)/(me[w].k-me[k].k);
if(me[k].lx<=tmpx&&me[k].rx>=tmpx&&me[w].lx<=tmpx&&me[w].rx>=tmpx)
{
li[tmpk]=tmpw;
num[tmpw]+=num[tmpk];
}
}
else if(me[k].ok)
{
if(me[k].lx<=me[w].lx&&me[k].rx>=me[w].rx)
{
li[tmpk]=tmpw;
num[tmpw]+=num[tmpk];
}
}
else if(me[w].ok)
{
if(me[w].lx<=me[k].lx&&me[w].lx>=me[k].rx)
{
li[tmpk]=tmpw;
num[tmpw]+=num[tmpk];
}
}
else if(me[w].lx==me[k].lx)
{
li[tmpk]=tmpw;
num[tmpw]+=num[tmpk];
}
}
}
k++;
}
else if(typ=='Q')
{
scanf("%d",&tmp);
tmp=findme(tmp);
printf("%d\n",num[tmp]);
}
getchar();
}
if(i!=t)//输出大坑
printf("\n");
}
}
return ;
}
HDU 1558的更多相关文章
- hdu 1558 (线段相交+并查集) Segment set
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题意是在坐标系中,当输入P(注意是大写,我当开始就wa成了小写)的时候输入一条线段的起点坐标和终点坐 ...
- hdu 1558 Segment set 线段相交+并查集
Segment set Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob ...
- hdu 1558 线段相交+并查集路径压缩
Segment set Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 1558 线段相交+并查集
题意:要求相交的线段都要塞进同一个集合里 sol:并查集+判断线段相交即可.n很小所以n^2就可以水过 #include <iostream> #include <cmath> ...
- HDU 1558 Segment set (并查集+线段非规范相交)
题目链接 题意 : 如果两个线段相交就属于同一集合,查询某条线段所属集合有多少线段,输出. 思路 : 先判断与其他线段是否相交,然后合并. #include <cstdio> #inclu ...
- hdu 1558 Segment set
Segment set Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 1558 Segment set(并查集)
题意: 给你一些线段的起点和终点的坐标,最后问和某个线段相连的或者间接相连的线段有多少个(包括本身)? P X1 Y1X2 Y2 起点(X1,X2)终点(X2,Y2):按照出现次数依次编号为1,2, ...
- hdu 1558(计算几何+并查集)
Segment set Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 1558 Segment set 计算几何+并查集★
#include <cstdio> #include <iostream> #include <string.h> using namespace std; ; # ...
随机推荐
- android应用流量信息提取
Linux 系统下所有的信息都是以文件的形式存在的,所以应用程序的流量信息也会被保存在操作系统的文件中.Android 2.2 版本以前的系统的流量信息都存放在 proc/net/dev(或者 pro ...
- tomcat 的log4j配置问题
#log4j.rootLogger=DEBUG,stdout,filelog4j.rootLogger=ERROR,stdout,filelog4j.appender.stdout=org.apach ...
- env - 在重建的环境中运行程序
SYNOPSIS(总览) env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...] DESCRIPTION(描述) 设置环境中的每个NAME为VAL ...
- react中的jsx详细理解
这是官网上的一个简单的例子 const name = 'Josh Perez'; const element = <h1>Hello, {name}</h1>; ReactDO ...
- ssget使用方法
语法: (ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list]) ssget 的参数均为可选参数,需要注意的是可选参数之间的组合条件.以下语法表 ...
- JS 冒泡事件顺序
参考:https://www.cnblogs.com/diaoyan/p/5630014.html
- Spring-02 Java配置实现IOC
Java配置 Spring4推荐使用java配置实现IOC Spring boot也推荐采用java配置实现IOC 在实际项目中,一般采用注解配置业务bean,全局配置使用Java配置. Java配置 ...
- Java中Synchronized和Lock的使用
Lock的锁定是通过代码实现的,而 synchronized 是在 JVM 层面上实现的 synchronized在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会因为出了异常没有释放锁造成线 ...
- typedef重复定义 和 error: ‘long long long’ is too long for GCC
今天发现一个很有意思的编译问题,然后在Stack Overflow上也有看到类似的.就是出现了 long long long 类型错误提示 错误提示如下: /home/yejy/algorithm_a ...
- Week06-继承、多态、抽象类与接口
Week06-继承.多态.抽象类与接口 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键字:接口,Comparable,interface关键字,Comparator,继承 ...