Codeforces_358A_Dima and Continuous Line(排序+暴力)

来源:互联网 发布:mac word 转pdf 不成功 编辑:程序博客网 时间:2024/04/19 22:36

题型:简单题


题意:给出一些点,按照输入顺序连续用半圆连接每两个点。问最后是否有相交的半圆。


分析:

        按照输入顺序将两个点连成的线段存起来,然后快排一下,查找是否有两个线段是相交的(包含的不算),有就说明半圆有相交的。


代码:

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define MAXN 10000using namespace std;struct Line{    int sta,en;}line[MAXN];bool cmp(Line a,Line b){    if(a.sta==b.sta) return a.en<b.en;    return a.sta<b.sta;}int a[MAXN];int main(){    int n;    while(~scanf("%d",&n)){        for(int i=0;i<n;i++){            scanf("%d",&a[i]);            if(i==0) continue;            line[i].sta=a[i-1];            line[i].en=a[i];            if(a[i-1]>a[i]) swap(line[i].sta,line[i].en);        }        sort(line+1,line+n,cmp);        bool flag=false;        for(int i=1;i<n;i++){            for(int j=1;j<i;j++){                if(line[j].sta<line[i].sta&&line[i].sta<line[j].en && line[i].sta<line[j].en&&line[j].en<line[i].en){                    flag=true;                    break;                }            }            if(flag) break;        }        if(!flag) printf("no\n");        else printf("yes\n");    }    return 0;}/*40 10 5 1550 1000 2000 3000 1500*/



原创粉丝点击