B. Anton and Lines

Time Limit: 20 Sec

Memory Limit: 256 MB

题目连接

http://codeforces.com/contest/593/problem/B

Description

The teacher gave Anton a large geometry homework, but he didn't do it (as usual) as he participated in a regular round on Codeforces. In the task he was given a set of n lines defined by the equations y = ki·x + bi. It was necessary to determine whether there is at least one point of intersection of two of these lines, that lays strictly inside the strip between x1 < x2. In other words, is it true that there are 1 ≤ i < j ≤ n and x', y', such that:

  • y' = ki * x' + bi, that is, point (x', y') belongs to the line number i;
  • y' = kj * x' + bj, that is, point (x', y') belongs to the line number j;
  • x1 < x' < x2, that is, point (x', y') lies inside the strip bounded by x1 < x2.

You can't leave Anton in trouble, can you? Write a program that solves the given task.

Under two situations the player could score one point.

⋅1. If you touch a buoy before your opponent, you will get one point. For example if your opponent touch the buoy #2 before you after start, he will score one point. So when you touch the buoy #2, you won't get any point. Meanwhile, you cannot touch buoy #3 or any other buoys before touching the buoy #2.

⋅2. Ignoring the buoys and relying on dogfighting to get point.
If you and your opponent meet in the same position, you can try to
fight with your opponent to score one point. For the proposal of game
balance, two players are not allowed to fight before buoy #2 is touched by anybody.

There are three types of players.

Speeder:
As a player specializing in high speed movement, he/she tries to avoid
dogfighting while attempting to gain points by touching buoys.
Fighter:
As a player specializing in dogfighting, he/she always tries to fight
with the opponent to score points. Since a fighter is slower than a
speeder, it's difficult for him/her to score points by touching buoys
when the opponent is a speeder.
All-Rounder: A balanced player between Fighter and Speeder.

There will be a training match between Asuka (All-Rounder) and Shion (Speeder).
Since the match is only a training match, the rules are simplified: the game will end after the buoy #1 is touched by anybody. Shion is a speed lover, and his strategy is very simple: touch buoy #2,#3,#4,#1 along the shortest path.

Asuka is good at dogfighting, so she will always score one point by dogfighting with Shion, and the opponent will be stunned for T seconds after dogfighting.
Since Asuka is slower than Shion, she decides to fight with Shion for
only one time during the match. It is also assumed that if Asuka and
Shion touch the buoy in the same time, the point will be given to Asuka
and Asuka could also fight with Shion at the buoy. We assume that in
such scenario, the dogfighting must happen after the buoy is touched by
Asuka or Shion.

The speed of Asuka is V1 m/s. The speed of Shion is V2 m/s. Is there any possibility for Asuka to win the match (to have higher score)?

Input

The first line of the input contains an integer n (2 ≤ n ≤ 100 000) — the number of lines in the task given to Anton. The second line contains integers x1 and x2 ( - 1 000 000 ≤ x1 < x2 ≤ 1 000 000) defining the strip inside which you need to find a point of intersection of at least two lines.

The following n lines contain integers ki, bi ( - 1 000 000 ≤ ki, bi ≤ 1 000 000) — the descriptions of the lines. It is guaranteed that all lines are pairwise distinct, that is, for any two i ≠ j it is true that either ki ≠ kj, or bi ≠ bj.

Output

Print "Yes" (without quotes), if there is at least one intersection of two distinct lines, located strictly inside the strip. Otherwise print "No" (without quotes).

Sample Input

4
1 2
1 2
1 0
0 1
0 2

Sample Output

NO

HINT

题意

给你一堆直线,然后问你在(x1,x2)区间内,是否有交点

题解:

这道题转化为,在直线交x = x1,x = x2之后,是否存在逆序对

有两个坑点,1.答案会爆long long 2.区间是开区间

代码

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<vector>
#include<algorithm>
using namespace std; struct node
{
double x;
int y;
};
bool cmp(node a,node b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
vector<node> Q;
vector<node> P;
int main()
{
int n;scanf("%d",&n);
double x1,x2;
cin>>x1>>x2;
if(x1>x2)swap(x1,x2);
x1 += 1e-;
x2 -= 1e-;
for(int i=;i<=n;i++)
{
double k,b;
scanf("%lf%lf",&k,&b);
node ppp;
ppp.x = k*x1+b,ppp.y=i;
Q.push_back(ppp);
ppp.x = k*x2+b,ppp.y=i;
P.push_back(ppp);
}
sort(Q.begin(),Q.end(),cmp);
sort(P.begin(),P.end(),cmp);
int flag = ;
for(int i=;i<n;i++)
{
if(Q[i].y!=P[i].y)
{
puts("YES");
return ;
}
}
puts("NO");
}

最新文章

  1. ReportingServies——SQLServer报表开发综合实例
  2. C# .NET 动态调用webservice的三种方式
  3. 查看ecshop广告位对应的广告详细信息
  4. 老鸟的Python入门教程
  5. Unity3D插件之Easy Touch 3.1(1): Easy Joystick
  6. Crystal框架配置参数加载机制详解?
  7. 设置共享目录(主机win7,虚拟机Ubuntu)
  8. 不借助工具在浏览器中通过Web API执行Dynamics 365操作(Action)实例
  9. MyeclipseJRE版本设置
  10. Emmet for Dreamweaver 整理分享
  11. Unity UGUI基础之Toggle
  12. [翻译] 对正在使用EF6x开发人员的一些话
  13. Storage 002 电商数据库设计
  14. Elasticsearch 滚动重启 必读
  15. js设计模式(六)---命令模式
  16. 判断是否存在某个字段hasOwnProperty
  17. mybatis学习 十一 缓存
  18. 虚拟机VMware的安装
  19. C# 求百分比并保留2位小数
  20. 1970年1月1日(00:00:00 GMT)Unix 时间戳(Unix Timestamp)

热门文章

  1. 深入浅出ClassLoader
  2. Banner 广告设计技巧及经验(转自UI中国)
  3. java解析XML四种方法
  4. A标记点击后去掉虚线
  5. UVALive 5029
  6. linux交叉环境的搭建以及嵌入式开发概述
  7. 如何将自定义RPM包加入YUM
  8. Python 笔记 : 类和继承
  9. Java-note-调试小技巧
  10. C语言——递归练习