2017.07.12【NOIP提高组】模拟赛B组 Super Big Stupid Cross 题解

原题:

http://172.16.0.132/senior/#contest/show/2049/0

题目描述:

“我是超级大沙茶”——Mato_No1
为了证明自己是一个超级大沙茶,Mato 神犇决定展示自己对叉(十字型)有多么的了解。
Mato 神犇有一个平面直角坐标系,上面有一些线段,保证这些线段至少与一条坐标轴平行。Mato 神犇需要指出,这些线段构成的最大的十字型有多大。
称一个图形为大小为R(R 为正整数)的十字型,当且仅当,这个图形具有一个中心点,它存在于某一条线段上,并且由该点向上下左右延伸出的长度为R 的线段都被已有的线段覆盖。
你可以假定:没有两条共线的线段具有公共点,没有重合的线段。

输入:

第一行,一个正整数N,代表线段的数目。
以下N 行,每行四个整数x1,y1,x2,y2(x1=x2 或y1=y2),描述了一条线段。

输出:

当不存在十字型时:输出一行“Human intelligence is really terrible”(不包括引号)。
否则:输出一行,一个整数,为最大的R。

样例输入:

输入1:
1
0 0 0 1
输入2:
3
-1 0 5 0
0 -1 0 1
2 -2 2 2

样例输出:

输出1:
Human intelligence is really terrible
输出2:
2

数据范围限制:

对于50%的数据:N≤1000。
对于100%的数据:1≤N≤100000,所有坐标的范围在-109~109 中。
后50%内,所有数据均为随机生成。

分析:

暴力+优化
将⊥x轴和⊥y轴的先分开存,快排取长度最长的5000个(别问我怎么得到的,卡常!!!)
再暴力枚举O(n^2)判断两条线有没有相交,取四头到交点的最小值,更新ans最大值

实现:

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

int ans=-1,n,i,j,a,b,c,d,ta,tb,aa[100001][6],bb[100001][6];
void qa(int l,int r)
{
    int i=l,j=r,mid=aa[(l+r)/2][5];
    do
    {
        while(aa[i][5]>mid) i++;
        while(aa[j][5]<mid) j--;
        if(i<=j)
        {
            memcpy(aa[0],aa[i],sizeof(aa[i]));
            memcpy(aa[i],aa[j],sizeof(aa[j]));
            memcpy(aa[j],aa[0],sizeof(aa[0]));
            i++;
            j--;
        }
    }
    while(i<=j);
    if(i<r) qa(i,r);
    if(l<j) qa(l,j);
}
void qb(int l,int r)
{
    int i=l,j=r,mid=bb[(l+r)/2][5];
    do
    {
        while(bb[i][5]>mid) i++;
        while(bb[j][5]<mid) j--;
        if(i<=j)
        {
            memcpy(bb[0],bb[i],sizeof(bb[i]));
            memcpy(bb[i],bb[j],sizeof(bb[j]));
            memcpy(bb[j],bb[0],sizeof(bb[0]));
            i++;
            j--;
        }
    }
    while(i<=j);
    if(i<r) qb(i,r);
    if(l<j) qb(l,j);
}
int main()
{
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d%d%d%d",&a,&b,&c,&d);
        if(b==d)
        {
            aa[++ta][1]=a;
            aa[ta][2]=b;
            aa[ta][3]=c;
            aa[ta][4]=d;
            if(a>c)
            {
                swap(aa[ta][1],aa[ta][3]);
                swap(aa[ta][2],aa[ta][4]);
            }
            aa[ta][5]=aa[ta][3]-aa[ta][1];
        }
        if(a==c)
        {
            bb[++tb][1]=a;
            bb[tb][2]=b;
            bb[tb][3]=c;
            bb[tb][4]=d;
            if(b>d)
            {
                swap(bb[tb][1],bb[tb][3]);
                swap(bb[tb][2],bb[tb][4]);
            }
            bb[tb][5]=bb[tb][4]-bb[tb][2];
        }
    }
    qa(1,ta);
    qb(1,tb);
    for(i=1;i<=ta;i++)
    {
        if(aa[i][5]<=ans*2) break;
        for(j=1;j<=tb;j++)
        {
            if(bb[i][5]<=ans*2) break;
            if(bb[j][2]<aa[i][2] && aa[i][2]<bb[j][4] && aa[i][1]<bb[j][1] && bb[j][1]<aa[i][3])
                ans=max( ans,min( min( bb[j][1]-aa[i][1],aa[i][3]-bb[j][1] ),min( aa[i][2]-bb[j][2],bb[j][4]-aa[i][2] ) ) );
        }
    }
    if(ans==-1) printf("Human intelligence is really terrible");
    else printf("%d",ans);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容