zoukankan      html  css  js  c++  java
  • P1847 轰炸II

    题目背景

    本题为轰炸数据加强版

    题目描述

    一个城市遭到了M次轰炸,每次都炸了一个每条边都与边界平行的矩形

    在轰炸后,有N个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮。

    输入输出格式

    输入格式:

    第一行,两个整数:M,N

    以下M行,每行四个整数:x1、y1、x2、y2,表示被轰炸的矩形的左上角坐标和右下角坐标(比如1 3 7 10就表示被轰炸的地方是从(1,3)到(7,10)的矩形)。

    再以下N行,每行两个整数,表示这个关键点的坐标。

    输出格式:

    共N行,

    每行第一个字符为YES或NO,表示是否被轰炸,若为YES,在一个空格后为两个整数,表示被炸了几次和最后一次是第几轮。

    输入输出样例

    输入样例#1:
    1 1 
    1 1 10 10
    11 11
    输出样例#1:
    NO

    说明

    1<=N,M<=2000

    1<=x1,y1,x2,y2<=maxlongint

    直接去染色肯定不行,所以我们可以离线作,倒序轰炸范围。

    #include<iostream>
    #include<cstdio>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    #include<cmath>
    using namespace std;
    #define LL long long 
    int    n,m,tot,last;
    int x[2100],y[2100],xx[2100],yy[2100];
    LL X,Y;
    int main()
    {
        scanf("%d%d",&m,&n);
        for(int i=1;i<=m;i++)
            scanf("%lld%lld%lld%lld",&x[i],&y[i],&xx[i],&yy[i]);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld%lld",&X,&Y);
            tot=0,last=0;
            for(int j=m;j>=1;j--)
            if(X>=x[j]&&X<=xx[j]&&Y>=y[j]&&Y<=yy[j])
                {
                    tot++;
                    if(!last) last=j;
                } 
            if(!tot)    printf("NO
    ");
            else printf("YES %d %d
    ",tot,last);
        }    
        return 0;
    } 
    View Code
  • 相关阅读:
    数组的应用:一。冒泡排序二。折半查找!二维数组的学习。
    break与continue,while 循环和一维数组的学习及作业
    for循环的应用:迭代法和穷举法
    循环
    称体重
    js js弹出框、对话框、提示框、弹窗总结
    windows 服务器开设端口
    SQL Server 数据库分离与附加(图文教程)
    ASP.NET MVC5 PagedList分页示例
    mvc 连接数据库但单复值得问题
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7348953.html
Copyright © 2011-2022 走看看