题目链接:POJ - 2653

首先这题数据n<100000可能没错,但只要边添加,边判断弹出的话,还是可以直接用双for来判断。

1.边判断弹出怎么实现?

链表似乎是很不错的,从前往后遍历,不行的O(1)弹出,但不管是手写指针链表,stl链表,还是数组链表都麻烦些(还是不太会QAQ)。可以用两个队列来实现,每次弹空一个,判断是否压入另一个,注意下最后输出答案是从小到大的

2.判断线段相交呢?

先判断是否平行

重合的话返回YES,平行的话返回NO

不平行的话

当做判断直线和线段相交,只不过判定两遍,两个线段分别做一次直线和线段,如果两次直线和线段都相交返回YES(这个方法这题是没问题,仔细想想好像没什么问题,甚至上面的平行都不用判断

否则返回NO

代码

#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<utility>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
#define fo(a,b) for(int i=a;i<=b;i++)
#define inf 0x3f3f3f3f
#define ll long long
#define dou double
#define EXP 1e-6
#define M 1000005
int n;
struct P{double x,y;P(double x=0,double y=0):x(x),y(y){}
};
struct L{P a,b;int id;L(){}L(P a,P b):a(a),b(b){}
}cnt;
queue<L>q[2];
double area(P a,P b,P c){return fabs((b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y))/2;
}
bool par(L a,L b){      //判断线段是否平行(重合和平行)return fabs((a.b.x-a.a.x)*(b.b.y-b.a.y)-(b.b.x-b.a.x)*(a.b.y-a.a.y))<EXP;
}
dou cross(P mark,P a,P b){             //在向量a->b的左边return (a.x-mark.x)*(b.y-mark.y)-(b.x-mark.x)*(a.y-mark.y);
}
int inte(L x,P a,P b)
{return cross(a,x.a,x.b)*cross(b,x.a,x.b)<EXP;
}
int f(L x,L y){if(par(x,y)){           //平行if(area(y.a,x.a,x.b)>EXP) return 1;        //平行return 0;         //重合}return !(inte(x,y.a,y.b)&&inte(y,x.a,x.b));
}
void add(L x,int d){while(!q[d%2].empty()){if(f(q[d%2].front(),x)) q[(d+1)%2].push(q[d%2].front());q[d%2].pop();}q[(d+1)%2].push(x);
}
int main(){while(cin>>n&&n){fo(1,n){cin>>cnt.a.x>>cnt.a.y>>cnt.b.x>>cnt.b.y;cnt.id=i;add(cnt,i);}printf("Top sticks:");int now=(n+1)%2;while(!q[now].empty()){printf(" %d%c",q[now].front().id,q[now].size()==1?'.':',');q[now].pop();}printf("\n");}return 0;
}

Pick-up sticks POJ - 2653相关推荐

  1. 【代码超详解】ZOJ 2551 / POJ 2653 Pick-up Sticks(快速排斥实验 + 跨立实验判断线段是否相交 · 模板)

    一.传送门 http://poj.org/problem?id=2653 https://zoj.pintia.cn/problem-sets/91827364500/problems/9182736 ...

  2. POJ 2653 线段交

    思路: 运用队列存储没有被覆盖的木棍,没加入一个棍子,就要判断一下是否队列中的棍子被覆盖,如果被覆盖,就从队列中删除: 线段交判断方法:跨立实验 Pick-up sticks Time Limit: ...

  3. 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks

    题目来源:http://poj.org/problem?id=2653 分析: 题意:按顺序给出一些木棍,输出在最上面的木棍标号. 用vector 存储木棍标号, 当前木棍与 vector 中的木棍 ...

  4. POJ 2653 Pick-up sticks (线段相交)

    题意:给你n条线段依次放到二维平面上,问最后有哪些没与前面的线段相交,即它是顶上的线段 题解:数据弱,正向纯模拟可过 但是有一个陷阱:如果我们从后面向前枚举,找与前面哪些相交,再删除前面那些相交的线段 ...

  5. POJ 2653 Pick-up sticks 判断线段相交

    枚举每条线段 这条线段上面没有与它相交的线段 #include <iostream> #include <cstdio> #include <cstring> #i ...

  6. poj 2653 Pick-up sticks(判断线段相交)

    题意:在桌上一次放n根木棒,求最上面的木棒编号: 思路:暴力枚举,看每根木棒上是否有木棒: 技巧:使用叉积,判断一个向量的两端点是否在另一向量的同侧,从而判断相交: #include<cstdi ...

  7. Wooden Sticks POJ - 1065(最大上升子序列+动态规划状态转移思维)

    题意: 给你n个木棍的长度和重量,让其成为上升序列,如果不能达到,就需要重新一分钟设置. a)第一个木棍的准备时间为1分钟. b)在处理长度为l和重量为w的棒之后,如果l <= l'并且w &l ...

  8. DP(01背包) UESTC 1218 Pick The Sticks (15CCPC C)

    题目传送门 题意:长度为L的金条,将n根金棍尽可能放上去,要求重心在L上,使得价值最大,最多有两条可以长度折半的放上去. 分析:首先长度可能为奇数,先*2.然后除了两条特殊的金棍就是01背包,所以dp ...

  9. uestc oj 1218 Pick The Sticks (01背包变形)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 给出n根木棒的长度和价值,最多可以装在一个长 l 的容器中,相邻木棒之间不允许重叠,且两边上的木棒,可 ...

最新文章

  1. Notepad++使用技法
  2. Python3 环境搭建、pycharm安装配置详解、新建Python项目(新手小白版Windows系统)
  3. java程序启动后就进行了7次younggc_程序员如何优化 Java GC
  4. UVA 12716 GCD XOR(数论+枚举+打表)
  5. JvavScript中的函数与对象
  6. 关于计算机学科的一些期刊和会议(转)
  7. docker强制删除none的image镜像
  8. 一个页面中,不同子页面见高度不受影响的布局
  9. 使用CrossOver的Wine配置修改容器WIndows系统版本
  10. itextsharp创建pdf
  11. python-mysql-excel-正则表达式,综合使用
  12. 如何在 Mac 上使用“活动监视器”
  13. filezilla linux 乱码,解决FileZilla Server搭建FTP中文乱码问题
  14. FSViewer 一款功能强大的看图软件
  15. 用php制作一个简单的网页留言板
  16. python降低图片分辨率_Python批量更改图片分辨率
  17. HTML网页设计制作大作业(div+css) ~ 中华美德6页面带音乐 ~ 学生网页设计作业源码(中华文化)
  18. arduino电风扇程序_【NO.7】智能风扇控制器-
  19. Java证书读取的两种方式
  20. 7-13 寻找大富翁 (25分)

热门文章

  1. 计算机专业相关认证证书含金量对比
  2. catia里画铰链_基于CATIA的汽车门铰链三维造型设计
  3. JAVA编译报错:A JNI error has occurred, please check your installation and try again
  4. 管家婆之垃圾清理功能
  5. [附源码]java毕业设计剧本杀门店管理系统-
  6. ASEMI-A7二极管和M7二极管有什么区别
  7. 被腾讯抄袭致死的公司有哪些? 网友留言: 无爆款不抄袭的腾讯!
  8. Shopee印尼本土多店铺运营管理首选工具——Shopee Man
  9. 互联网大厂java面试题一京东
  10. Thinkpad预装office 2019激活