zoukankan      html  css  js  c++  java
  • 洛谷4623 [COCI2012-2013#6] BUREK

    题目描述

    给定N个三角形,和M条直线,直线要么平行于X轴,要么平行于Y轴,问这M条直线 分别经过多少个三角形内部 (注意是内部即分开的两个多边形的面积均大于零)。

    输入输出格式

    输入格式:

    第一行一个正整数 N(2N100000)表示三角形的个数。 接下来N行,每行三个坐标(x1,y1), (x2,y2), (x3,y3) 表示三点,且这三点不共线。所有 坐标均为非负整数且小于106,三角形可以重叠。 接下来一个正整数(2≤M≤100000)(,表示M个直线。 接下来M行,每行描述一条直线。"x =c"或"yc" (注意等号两边的空格) c为非负整数,且小于10^

    输出格式:

    每一条直线输出一个整数,表示它穿过的三角形的个数。

    输入输出样例

    输入样例#1: 
    3
    1 0 0 2 2 2
    1 3 3 5 4 0
    5 4 4 5 4 4
    4
    x = 4
    x = 1
    y = 3
    y = 1
    输出样例#1: 
    0
    1
    1
    2
    输入样例#2: 
    4
    2 7 6 0 0 5
    7 1 7 10 11 11
    5 10 2 9 6 8
    1 9 10 10 4 1
    4
    y = 6
    x = 2
    x = 4
    x = 9
    输出样例#2: 
    3
    2
    3
    2

    说明

    • 对于40%的数据M≤300
    • 另有40%的数据,所有三角形的坐标小于1000.

    题目解读

    因为直线要么平行于X轴,要么平行于Y轴 

    所以我们把每个三角形 简化成 其X,Y方向上投影的两条线段,然后判断所求直线与这些线段的交点个数就好了

    这个坐标都是整点,于是把每条线段覆盖的区间+1,这样的话 就能直接得到 所求点被多少条线段覆盖了

    区间加可以直接通过差分实现

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #define MAXN 1000005
    int N,M,p[MAXN],t[MAXN],P[MAXN],T[MAXN];
    char c[5];
    using namespace std;
    int main()
    {
        scanf("%d",&N);
        for(int i=1;i<=N;i++){
            int xa,xb,xc,ya,yb,yc,u,d,l,r;
            scanf("%d%d%d%d%d%d",&xa,&ya,&xb,&yb,&xc,&yc);
            r=max(xa,xb),l=min(xa,xb),u=max(ya,yb),d=min(ya,yb);
            r=max(xc, r),l=min(xc, l),u=max(yc, u),d=min(yc, d);
            t[l+1]++,t[r]--,p[d+1]++,p[u]--;              //差分数组,区间(l,r) +1
        }    
        for(int i=1;i<=1000002;i++)
            T[i]=T[i-1]+t[i],P[i]=P[i-1]+p[i];
        scanf("%d",&M);
        for(int i=1;i<=M;i++)
        {
            int z;cin>>c[0]>>c[1]>>z;
            if(c[0]=='x')printf("%d
    ",T[z]);
            if(c[0]=='y')printf("%d
    ",P[z]);  
        }
    //    system("pause");
        return 0;
    }
  • 相关阅读:
    理解Linux虚拟文件系统VFS
    Linux进程间通信(IPC)
    为 区域添加 Tag
    html 模板 swig 预编译插件 grunt-swig-precompile
    如何开发 Grunt 插件
    Web开发常见的漏洞
    CSS实现不固定宽度和高度的自动居中
    Sublime Text 前端插件推荐
    JavaScript 防止事件冒泡
    HTML标签篇
  • 原文地址:https://www.cnblogs.com/Elfish/p/9813201.html
Copyright © 2011-2022 走看看