CCF-CSP 202206-2 寻宝!大冒险!

2024-02-07 01:04
文章标签 ccf csp 大冒险 寻宝 202206

本文主要是介绍CCF-CSP 202206-2 寻宝!大冒险!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CCF-CSP 202206-2 寻宝!大冒险!

  • 😸题目要求
    • 🐈‍⬛题目背景
    • 🐈‍⬛问题描述
    • 🐈‍⬛输入格式
    • 🐈‍⬛输出格式
    • 🐈‍⬛样例说明
      • 🎶样例1输入
      • 🎶样例1输出
      • 🎶样例1解释
      • 🎶样例2输入
      • 🎶样例2输出
      • 🎶样例2解释
    • 🐈‍⬛子任务
    • 🐈‍⬛提示
  • 😸问题解决
    • 🐈满分代码(含逐行代码解释)
      • 🍭C++
    • 🐈场景拓展

😸题目要求

🐈‍⬛题目背景

暑假要到了。可惜由于种种原因,小 P 原本的出游计划取消。失望的小 P 只能留在西西艾弗岛上度过一个略显单调的假期……直到……

某天,小 P 获得了一张神秘的藏宝图。

🐈‍⬛问题描述

西西艾弗岛上种有 n n n 棵树,这些树的具体位置记录在一张绿化图上。

简单地说,西西艾弗岛绿化图可以视作一个大小为 ( L + 1 ) × ( L + 1 ) (L+1)×(L+1) (L+1)×(L+1) 01 01 01 矩阵 A A A,地图左下角(坐标 ( 0 , 0 ) (0,0) (0,0))和右上角(坐标 ( L , L ) (L,L) (L,L))分别对应 A [ 0 ] [ 0 ] A[0][0] A[0][0] A [ L ] [ L ] A[L][L] A[L][L]。其中 A [ i ] [ j ] = 1 A[i][j]=1 A[i][j]=1 表示坐标 ( i , j ) (i,j) (i,j) 处种有一棵树, A [ i ] [ j ] = 0 A[i][j]=0 A[i][j]=0 则表示坐标 ( i , j ) (i,j) (i,j) 处没有树。换言之,矩阵 A A A 中有且仅有的 n n n 1 1 1 展示了西西艾弗岛上 n n n 棵树的具体位置。

传说,大冒险家顿顿的宝藏就埋藏在某棵树下。并且,顿顿还从西西艾弗岛的绿化图上剪下了一小块,制作成藏宝图指示其位置。

具体来说,藏宝图可以看作一个大小为 ( S + 1 ) × ( S + 1 ) (S+1)×(S+1) (S+1)×(S+1) 01 01 01 矩阵 B B B S S S 远小于 L L L),对应着 A A A 中的某一部分。理论上,绿化图 A A A 中存在着一处坐标 ( x , y ) (x,y) (x,y)
0 ≤ x , y ≤ L − S 0 \leq x,y \leq L-S 0x,yLS)与藏宝图 B B B 左下角 ( 0 , 0 ) (0,0) (0,0) 相对应,即满足:对 B B B 上任意一处坐标 ( i , j ) (i,j) (i,j) 0 ≤ i , j ≤ S 0 \leq i,j \leq S 0i,jS),都有 A [ x + i ] [ y + i ] = B [ i ] [ j ] A[x+i][y+i]=B[i][j] A[x+i][y+i]=B[i][j]。当上述条件满足时,我们就认为藏宝图 B B B 对应着绿化图 A A A 中左下角为 ( x , y ) (x,y) (x,y)、右上角为 ( x + S , y + S ) (x+S,y+S) (x+S,y+S) 的区域。

实际上,考虑到藏宝图仅描绘了很小的一个范围,满足上述条件的坐标 ( x , y ) (x,y) (x,y) 很可能存在多个。请结合西西艾弗岛绿化图中 n n n 棵树的位置,以及小 P 手中的藏宝图,判断绿化图中有多少处坐标满足条件。

特别地,藏宝图左下角位置一定是一棵树,即 A [ x ] [ y ] = B [ 0 ] [ 0 ] = 1 A[x][y]=B[0][0]=1 A[x][y]=B[0][0]=1,表示了宝藏埋藏的位置。

🐈‍⬛输入格式

从标准输入读入数据。

输入的第一行包含空格分隔的三个正整数 n n n L L L S S S,分别表示西西艾弗岛上树的棵数、绿化图和藏宝图的大小。

由于绿化图尺寸过大,输入数据中仅包含 n n n 棵树的坐标而非完整的地图;即接下来 n n n 行每行包含空格分隔的两个整数 x x x y y y,表示一棵树的坐标,满足 0 ≤ x , y ≤ L 0 \leq x,y \leq L 0x,yL 且同一坐标不会重复出现。

最后 ( S + 1 ) (S+1) (S+1) 行输入小 P 手中完整的藏宝图,其中第 i i i 行( 0 ≤ i ≤ S 0 \leq i \leq S 0iS)包含空格分隔的 ( S + 1 ) (S+1) (S+1) 0 0 0 1 1 1,表示 B [ S − i ] [ 0 ] ⋅ ⋅ ⋅ B [ S − i ] [ S ] B[S-i][0]···B[S-i][S] B[Si][0]⋅⋅⋅B[Si][S]

需要注意,最先输入的是 B [ S ] [ 0 ] ⋅ ⋅ ⋅ B [ S ] [ S ] B[S][0]···B[S][S] B[S][0]⋅⋅⋅B[S][S] 一行, B [ 0 ] [ 0 ] ⋅ ⋅ ⋅ B [ 0 ] [ S ] B[0][0]···B[0][S] B[0][0]⋅⋅⋅B[0][S] 一行最后输入。

🐈‍⬛输出格式

输出到标准输出。

输出一个整数,表示绿化图中有多少处坐标可以与藏宝图左下角对应,即可能埋藏着顿顿的宝藏。

🐈‍⬛样例说明

🎶样例1输入

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

🎶样例1输出

3

🎶样例1解释

绿化图上 ( 0 , 0 ) (0,0) (0,0) ( 1 , 1 ) (1,1) (1,1) ( 2 , 2 ) (2,2) (2,2) 三处均可能埋有宝藏。

🎶样例2输入

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

🎶样例2输出

0

🎶样例2解释

如果将藏宝图左下角与绿化图 ( 3 , 3 ) (3,3) (3,3) 处对应,则藏宝图右上角会超出绿化图边界,对应不成功。

🐈‍⬛子任务

40% 的测试数据满足: L ≤ 50 L \leq 50 L50

70% 的测试数据满足: L ≤ 2000 L \leq 2000 L2000

全部的测试数据满足: n ≤ 1000 n \leq 1000 n1000 L ≤ 1 0 9 L \leq 10^9 L109 S ≤ 50 S \leq 50 S50

🐈‍⬛提示

实际测试数据中不包括答案为 0 0 0 的用例。

😸问题解决

🐈满分代码(含逐行代码解释)

🍭C++

#include<bits/stdc++.h>
using namespace std;map<pair<int, int>, int>tree; //pair表示的是坐标(x,y),映射到0或1上(即有没有树)
int n, L, S;
int A[1010][2];
int B[51][51];bool check(int x, int y){if(x + S > L || y + S > L) return false; //排除藏宝图过大的情况 for(int i = 0; i <= S; i++){for(int j = 0; j <= S; j++){if(B[i][j] == 1){if(tree.count({x+i, y+j}) != 1) return false;}if(B[i][j] == 0){if(tree.count({x+i, y+j}) == 1) return false;}}} return true;
}int main(){cin >> n >> L >> S;for(int i = 0; i < n; i++){cin >> A[i][0] >> A[i][1];tree[{A[i][0], A[i][1]}] = 1;} for(int i = S; i >= 0; i--){for(int j = 0; j <= S; j++){cin >> B[i][j]; //注意题目中所描述的矩阵B的形状 }}int result = 0;for(int i = 0; i <= n; i++){if(check(A[i][0], A[i][1])) result++;}cout << result << endl;return 0;
}

🐈场景拓展

本题代码主要涉及到二维空间内的模式识别和匹配问题,本题代码的核心思想是在一个大的数据集中寻找与给定模式完全匹配的子集,它通过对给定区域内的特定模式(在这个例子中是树木的分布)进行搜索和验证。

  • 地图或矩阵匹配问题:在一个大的二维数组(如地图、森林)中寻找与给定小矩阵(如藏宝图、特定图案)完全匹配的区域。这类问题常见于图像处理、游戏开发(如寻宝、迷宫探索)和模式识别领域。
  • 环境模拟与分析:在生态学、城市规划或农业科学等领域模拟特定环境下的分布情况,如树木、建筑物或其他自然或人造物的分布,并分析其对环境的影响或符合特定条件的区域。
  • 图像处理与识别:虽然本题代码示例是以文本形式处理数据,但相似的逻辑可以应用于图像识别中,比如寻找图像中的特定标志、图案或对象。这需要将图像数据转换为二维数组或矩阵,并定义匹配规则。
  • 游戏开发中的关卡设计与检测:在某些类型的游戏中,可能需要检测地图上是否存在符合特定规则的结构或模式,如检查玩家是否按照特定的布局建造了建筑物或其他物体。

这篇关于CCF-CSP 202206-2 寻宝!大冒险!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686088

相关文章

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

ccfcsp-202206(1、2、3)

202206-1 归一化处理 #include <bits/stdc++.h>using namespace std;int main() {int n;cin >> n;vector<double> vec(n);double ave = 0;for(int i = 0; i < n; i++){cin >> vec[i];ave += vec[i];}ave /= n;double va

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

CCF推荐C类会议和期刊总结(计算机网络领域)

CCF推荐C类会议和期刊总结(计算机网络领域) 在计算机网络领域,中国计算机学会(CCF)推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结,包括全称、出版社、dblp文献网址以及所属领域。 目录 CCF推荐C类会议和期刊总结(计算机网络领域) C类期刊 1. Ad Hoc Networks 2. CC 3. TNSM 4. IET Com

CSP-J基础之数学基础 初等数论 一篇搞懂(二)

文章目录 前言算术基本定理简介什么是质数?举个简单例子:重要的结论:算术基本定理公式解释:举例: 算术基本定理的求法如何找出质因数:举个简单的例子: 重要的步骤:C++实现 同余举个例子:同余的性质简介1. 同余的自反性2. 同余的对称性3. 同余的传递性4. 同余的加法性质5. 同余的乘法性质 推论 总结 前言 在计算机科学和数学中,初等数论是一个重要的基础领域,涉及到整数

CSP-J基础之cmath常见函数

文章目录 前言1. **`sin` 函数**2. **`cos` 函数**3. **`exp` 函数**4. **`log` 函数**5. **`fabs` 函数**6. **`pow` 函数**7. **`sqrt` 函数**8. **`ceil` 函数**9. **`floor` 函数** 总结 前言 在计算机科学与编程中,数学函数是解决各种计算问题的基础工具。C++标准

CSP-J选择题 - 排列组合

排列问题:有5名学生参加比赛,要求排成一排拍照,有多少种不同的排列方式?组合问题:从10本书中选出3本书送给朋友,有多少种不同的选择方式?排列问题:一个教室有7个座位,5个学生需要坐下,有多少种不同的排列方式?组合问题:从12个人中选出4个人组成一个团队,有多少种不同的方式?排列问题:一个密码由4个字母组成,字母可以重复使用,有多少种不同的排列组合?组合问题:从8个不同颜色的球中选出3个,不考虑顺

CSP-J 之C++常用英文缩写

文章目录 C++常用英文缩写前言常用缩写解析C++ 基础缩写输入输出相关控制台 命名与类型常用函数在线测评相关 总结 C++常用英文缩写 前言 在编程比赛和日常开发中,C++是一门广泛使用的编程语言,许多英文缩写贯穿其中。了解这些缩写不仅有助于提高编程效率,还能加深对编程语言及其工作机制的理解。本文将介绍C++中常见的英文缩写,以及它们在编程中的实际含义和应用。 常用

P7072 [CSP-J2020] 直播获奖

题目描述     NOI2130即将举行。为了增加观赏性,CCF决定逐一评出每个选手的成绩,并直播即时的获奖分数线。本次竞赛的获奖率为w% 的选手的最低成绩就是即时的分数线。     更具体地,若当前已评出了 p 个选手的成绩,则当前计划获奖人数为max(1,⌊p∗w%⌋),其中w是获奖百分比,⌊x⌋ 表示对x向下取整,max(x,y) 表示x和y中较大的数。如有选手成绩相同,则所有成绩并列的

CSP-J/S 复赛程序提交指南,提交错误必爆零!!!

CSP-J/S 复赛题目程序需要以文件的形式提交,如果之前没有了解过,那肯定会爆0,该怎么操作呢? 大家好,我是大李。 针对复赛考试提交详情,这里做个详细介绍,分为文件的创建和文件体提交等事项。 一、关于文件建立 复赛考试时需要根据提示,在桌面建立文件夹,将含有文件体的cpp文件保存至桌面。 每一题的命名都需要根据提示来去命名。 以2023年CSP-J/S 第二轮为例 在电