CodeForces 593B Anton and Lines

计算出每条线段在x1处的y坐标和x2处的y坐标。

就下来只要根据每条线段左右两处的y坐标就可以判断是否有交点。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

long long INF=9999999999999999;
long long x1,x2;
int n;
struct X
{
    long long k,b;
    long long yl,yr;
}s[100000+10];

long long Min[100000+10];

bool cmp(const X&a,const X&b)
{
    if(a.yl==b.yl) return a.yr<b.yr;
    return a.yl<b.yl;
}

int main()
{
    scanf("%d",&n);
    scanf("%lld%lld",&x1,&x2);
    for(int i=1;i<=n;i++)
        scanf("%lld%lld",&s[i].k,&s[i].b);

    for(int i=1;i<=n;i++)
    {
        s[i].yl=s[i].k*x1+s[i].b;
        s[i].yr=s[i].k*x2+s[i].b;
    }

    sort(s+1,s+1+n,cmp);

    for(int i=1;i<=n;i++) Min[i]=INF;
    for(int i=n-1;i>=1;i--)
    {
        if(s[i].yl==s[i+1].yl) Min[i]=Min[i+1];
        else Min[i]=min(Min[i+1],s[i+1].yr);
    }
    bool Find=0;
    for(int i=1;i<=n;i++)
        if(Min[i]<s[i].yr) Find=1;

    if(Find) printf("YES\n");
    else printf("NO\n");
    return 0;

}
时间: 2024-12-29 11:56:02

CodeForces 593B Anton and Lines的相关文章

Codeforces Round #329 (Div. 2)B. Anton and Lines 贪心

B. Anton and Lines 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 necessar

codeforces 785C Anton and Fairy Tale

题目链接:http://codeforces.com/problemset/problem/785/C 题意:仓库容量是n,一开始是满的,然后每天晚上可以往仓库里装m粮食,最多装到n.然后每天白天有鸟来吃粮食,一只鸟吃1单位.第i天有i只鸟.问你多少天鸟可以把粮食吃完. 分析:一开始读错题,导致wa了两发.如果n<=m的话,只有n只鸟的时候一天把他吃完,输出n.如果m<n的话,前m是肯定吃不完的,m天之后,从1开始计数,就是好比每天白天吃i+m,晚上装m,一天好比加了i.所以可以二分天数,但是

Codeforces 734C Anton and Making Potions(枚举+二分)

题目链接:http://codeforces.com/problemset/problem/734/C 题目大意:要制作n个药,初始制作一个药的时间为x,魔力值为s,有两类咒语,第一类周瑜有m种,每种咒语使制作一个药的时间变成a[i],花费b[i]的魔力,第二类咒语有k种,每种咒语瞬间产生c[i]个药,花费d[i]的魔力,c[i]和d[i]都是不递减的,求最短时间内产生n个药的时间.解题思路:因为c[i]和d[i]都是不降的,所以可以枚举a[i],然后二分查找花费小于t-b[i]的第二类咒语.注

CodeForces 734F Anton and School

位运算. 两个数的和:$A+B=(AandB)+(AorB)$,那么$b[i]+c[i]=n*a[i]+suma$.可以解出一组解,然后再按位统计贡献验证一下. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<v

CodeForces 593B

题意:直线方程y=k*x+b,给你n条直线的k和b(没有相同的直线),在x∈(x1,x2)的区间里,如果存在两条直线相交,则输出YES,否则输出NO. 题解:如果存在两条直线L[i],L[j]在区间(x1,x2)处相交,则有(y1[i]-y2[i])*(y1[j]-y2[j])<0;我们可以利用库函数sort()的一些性质求解.①时间复杂度为O(NlogN),②每个元素都有比较(与定义的cmp函数有关).具体解法看代码. #include <iostream> #include <

CodeForces 734B Anton and Digits

贪心.先取$256$,再取$32$. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<

CodeForces 734E Anton and Tree

$dfs$缩点,树形$dp$. 首先将连通块缩点,缩点后形成一个黑白节点相间的树.接下来的任务就是寻找一个$root$,使这棵树以$root$为根,树的高度是最小的(也就是一层一层染色).树形$dp$可以解决这个问题,第一次$dfs$处理子树,第二次$dfs$枚举$root$计算答案. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring>

codeforces 584E Anton and Ira [想法题]

题意简述: 给定一个$1$到$n(n<=2000)$的初始排列以及最终排列 我们每次可以选取位置为$i$和$j$的 并交换它们的位置 花费为$ |i-j| $ 求从初始状态变换到末状态所需最小花费 ----------------------------------------------------------------------------------------------------------- 比赛时这题留了$40min$ 然而自己贪心策略还是有漏洞 结束后看了首页的官方题解 感

CodeForces 785E Anton and Permutation

分块,暴力. 将序列分成$sqrt(n)$块,每块$sqrt(n)$个元素,每块内排序. 每次操作要计算这个区间中比$a[p1]$大的有几个,小的有几个,比$a[p2]$大的有几个,小的有几个,端点的块内暴力找,中间的块内二分找. 交换完数字之后,可以直接重新$sort$排个序. 总体时间复杂度$O(m*log(sqrt(n))*sqrt(n))$. #include <cstdio> #include <cmath> #include <cstring> #inclu