能力提升综合题单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月前
|
机器学习/深度学习
ProCo: 无限contrastive pairs的长尾对比学习——TPAMI 2024最新成果解读
【10月更文挑战第3天】《ProCo: Infinite Contrastive Pairs for Long-Tailed Contrastive Learning》是TPAMI 2024的最新成果,针对现实世界图像数据中的长尾分布问题,提出了一种通过生成无限对比对来提升模型效果的方法。ProCo包括构建原型网络、生成对比对、设计对比损失函数及优化策略。实验结果显示,ProCo在多个长尾数据集上显著优于现有方法。此外,还提供了简化版示例代码,便于读者理解和应用。未来,该领域有望涌现更多创新研究。
58 3
|
4月前
|
算法 关系型数据库 程序员
第一周算法设计与分析:A : log2(N)
这篇文章介绍了解决算法问题"输入一个数N,输出log2N(向下取整)"的三种编程思路,包括使用对数函数和幂函数的转换方法,以及避免浮点数精度问题的整数逼近方法。
|
4月前
|
存储 SQL 分布式计算
揭秘Delta Lake:如何以史诗级时间旅行能力,驾驭数据表的无限版本,让数据科学家直呼过瘾!
【8月更文挑战第27天】Delta Lake是一种开源的大数据存储层,它通过事务日志与快照机制管理表格的多版本,支持数据的时间旅行功能。其核心是维护一个详细的事务日志记录所有表操作,并通过快照保存特定时间点的表状态。用户可通过指定时间戳或版本号查询历史版本数据,系统默认保留30天的历史记录并支持自定义设置。借助Delta Lake,数据团队能高效地处理数据变更和审计需求。
55 0
|
4月前
|
JSON 分布式计算 监控
《数据版本迷宫揭秘》——Delta Lake如何玩转时间旅行,让你的数据不再迷失!
【8月更文挑战第27天】Delta Lake是一款为Apache Spark设计的高性能数据存储系统,提供ACID事务、可扩展的元数据管理和数据版本控制等功能。利用不可变的JSON格式事务日志,Delta Lake能追踪所有表变更,确保数据一致性和可追溯性。每项写操作都会生成新的事务日志文件,支持轻松回溯至任意版本。此外,Delta Lake还具备数据回溯、确保数据一致性及审计监控等优点,为大数据环境下的数据治理提供强大支持。
43 0
|
7月前
|
算法 机器人 程序员
Scratch3.0——助力新进程序员理解程序(案例八、等差数列计算1)
Scratch3.0——助力新进程序员理解程序(案例八、等差数列计算1)
60 0
|
安全 C++
CSDN三道简单题:合并检测、星期一、特别数的和
CSDN三道简单题:合并检测、星期一、特别数的和
134 0
CSDN三道简单题:合并检测、星期一、特别数的和
|
算法 C++ 人工智能
NOIP-C++大神培养计划Step1.1.1基础算法——模拟算法1
模拟算法,可以说是最基础的算法了。它的基本定义没太多意思:就是去模拟题目的要求。题意要你怎么做,你就怎么做,看懂了题目,基本上就会做了。 举一个大家耳熟能详的栗子。 A+B Problem给定两个整数A和B,输出他们的和。
1844 0
|
算法
NOIP-C++大神培养计划 Step1.1.2基础算法——模拟算法2
大家好,我是小笨笨,今天我们继续来讲解模拟算法。 我们直接上例题! 栗1.1.2-1 洛谷P1014 Cantor表https://www.luogu.org/problemnew/show/P1014题目描述现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。
1353 0