能力提升综合题单Part2 基础算法 第一天

简介: 能力提升综合题单Part2 基础算法 第一天

https://www.luogu.com.cn/problem/P1003

P1003 [NOIP2011 提高组] 铺地毯

题目描述

为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n 张地毯,编号从 1 到 n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。

地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。

输入格式

输入共 n + 2行。

第一行,一个整数 n,表示总共有 n张地毯。

接下来的 n行中,第 i+1 行表示编号 ii 的地毯的信息,包含四个整数 a ,b ,g ,k每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标 (a, b)以及地毯在 x轴和 y轴方向的长度。

第 n + 2行包含两个整数 x和 y,表示所求的地面的点的坐标 (x, y)。

输出格式

输出共 1行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出 -1

输入输出样例

输入 #1

3
1 0 2 3
0 2 3 3
2 1 3 3
2 2

输出 1

3

输入 2

3
1 0 2 3
0 2 3 3
2 1 3 3
4 5

输出 2

-1

说明/提示

【样例解释 1】

如下图,1号地毯用实线表示,2号地毯用虚线表示,3号用双实线表示,覆盖点 (2,2) 的最上面一张地毯是 3号地毯。

【数据范围】

image.png

C++代码如下

#include <iostream>
using namespace std;
int N = 10010;
int main()
{
    int n;
    cin >> n;
    int a[N], b[N], g[N], k[N];
    for (int i = 1 ;i <= n; i++) 
    {
        cin >> a[i] >> b[i] >> g[i] >> k[i];    
    }
    int x,y;
    cin >> x >> y;
    // 后来的会覆盖前面的,因此需要逆序查找
    for (int i = n; i >= 1; i--) 
    {
        if (x >= a[i] && y >= b[i] && x <= a[i] + g[i] && y <= b[i] + k[i]) 
        {
            cout << i << endl;
            return 0;
        }
    }
    cout << "-1" << endl;
    return 0;
}

Java代码如下

import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(reader.readLine());
        int[] a = new int[n + 1];
        int[] b = new int[n + 1];
        int[] g = new int[n + 1];
        int[] k = new int[n + 1];
        String[][] str = new String[n + 1][4];
        for (int i = 1; i <= n; i++) {
            str[i] = reader.readLine().split(" ");
        }
        for (int i = 1; i <= n; i++) {
            a[i] = Integer.parseInt(str[i][0]);
            b[i] = Integer.parseInt(str[i][1]);
            g[i] = Integer.parseInt(str[i][2]);
            k[i] = Integer.parseInt(str[i][3]);
        }
        String[] s = reader.readLine().split(" ");
        int x = Integer.parseInt(s[0]);
        int y = Integer.parseInt(s[1]);
        boolean flag = false;
        for (int i = n; i >= 1; i--) {
            if (x >= a[i] && x <= a[i] + g[i] && y >= b[i] && y <= b[i] + k[i]) {
                flag = true;
                writer.write(i + "\n");
                break;
            }
        }
        if (!flag) {
            writer.write("-1\n");
        }
        writer.flush();
        writer.close();
        reader.close();
    }
}


相关文章
|
2月前
|
算法 关系型数据库 程序员
第一周算法设计与分析:A : log2(N)
这篇文章介绍了解决算法问题"输入一个数N,输出log2N(向下取整)"的三种编程思路,包括使用对数函数和幂函数的转换方法,以及避免浮点数精度问题的整数逼近方法。
|
机器学习/深度学习 人工智能 算法
集中一点,演化无限:PPO × Family决策智能入门公开课即日开讲
集中一点,演化无限:PPO × Family决策智能入门公开课即日开讲
|
Java
java学习第七天笔记-方法132-综合练习-评委打分思路分析
java学习第七天笔记-方法132-综合练习-评委打分思路分析
85 0
java学习第七天笔记-方法132-综合练习-评委打分思路分析
|
算法
基础算法练习200题06、分练习本
基础算法练习200题06、分练习本
72 0
|
C++
CCF小白刷题之路---202006-2 稀疏向量(C/C++ 100分)
CCF小白刷题之路---202006-2 稀疏向量(C/C++ 100分)
126 0
CCF小白刷题之路---202006-2 稀疏向量(C/C++ 100分)
|
机器学习/深度学习 人工智能 算法
Interview:算法岗位面试—10.12上午—上海某科技公司图像算法岗位(偏图像算法,互联网AI行业)技术面试考点之LoR逻辑回归的底层代码实现、特征图计算公式
Interview:算法岗位面试—10.12上午—上海某科技公司图像算法岗位(偏图像算法,互联网AI行业)技术面试考点之LoR逻辑回归的底层代码实现、特征图计算公式
Interview:算法岗位面试—10.12上午—上海某科技公司图像算法岗位(偏图像算法,互联网AI行业)技术面试考点之LoR逻辑回归的底层代码实现、特征图计算公式
|
机器学习/深度学习 人工智能 算法
机器学习实战篇——用支撑向量算法在Kaggle上跑个分
之前写了关于人工智能和机器学习的理论基础文章,今天就理论联系实际,用机器学习算法跑个分。 机器学习最重要的就是数据,Kaggle平台提供了大量数据为机器学习的学习者和研究者提供一个跑分的平台。
1252 0
|
算法 C++
算法学习之路|日期问题
小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。
1566 0
|
算法 人工智能
算法学习之路|爱丁顿数
英国天文学家爱丁顿很喜欢骑车。据说他为了炫耀自己的骑车功力,还定义了一个“爱丁顿数”E,即满足有E天骑车超过E英里的最大整数E。据说爱丁顿自己的E等于87。
1037 0