ccf-csp 寻宝!大冒险!

本文介绍了一个基于坐标匹配的寻宝游戏算法。玩家需根据手中的藏宝图,在一张表示树木位置的大地图上寻找可能的宝藏埋藏点。文章详细解释了输入输出格式,并通过样例演示了算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

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

问题描述
西西艾弗岛上种有 棵树,这些树的具体位置记录在一张绿化图上。
简单地说,西西艾弗岛绿化图可以视作一个大小为 的 矩阵 ,
地图左下角(坐标 )和右上角(坐标 )分别对应 和 。
其中 表示坐标 处种有一棵树, 则表示坐标 处没有树。
换言之,矩阵 中有且仅有的 个 展示了西西艾弗岛上 棵树的具体位置。

传说,大冒险家顿顿的宝藏就埋藏在某棵树下。
并且,顿顿还从西西艾弗岛的绿化图上剪下了一小块,制作成藏宝图指示其位置。
具体来说,藏宝图可以看作一个大小为 的 矩阵 ( 远小于 ),对应着 中的某一部分。
理论上,绿化图 中存在着一处坐标 ()与藏宝图 左下角 相对应,即满足:
对 上任意一处坐标 (),都有 。
当上述条件满足时,我们就认为藏宝图 对应着绿化图 中左下角为 、右上角为 的区域。

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

特别地,藏宝图左下角位置一定是一棵树,即 ,表示了宝藏埋藏的位置。

输入格式
从标准输入读入数据。

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

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

最后 行输入小 P 手中完整的藏宝图,其中第 行()包含空格分隔的 个 和 ,表示 。
需要注意,最先输入的是 一行, 一行最后输入。

输出格式
输出到标准输出。

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

样例 1 输入
5 100 2
0 0
1 1
2 2
3 3
4 4
0 0 1
0 1 0
1 0 0
Data
样例 1 输出
3
Data
样例 1 解释
绿化图上 、 和 三处均可能埋有宝藏。

样例 2 输入
5 4 2
0 0
1 1
2 2
3 3
4 4
0 0 0
0 1 0
1 0 0
Data
样例 2 输出
0
Data
样例 2 解释
如果将藏宝图左下角与绿化图 处对应,则藏宝图右上角会超出绿化图边界,对应不成功。

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <utility>
using namespace std;
typedef pair<int,int> pii;
int main()
{
    int n,l,s;
    cin>>n>>l>>s;
    int b[51][51];
    map<pii,int> mp;
    for(int i=0;i<n;i++)
    {
        int x,y;
        cin>>x>>y;
        mp[{x,y}]=1;
    }
    for(int i=s;i>=0;i--)
    {
        for(int j=0;j<=s;j++)
        {
            cin>>b[i][j];
        }
    }
    int cnt=0;
    for(auto &p:mp)
    {
                int x1=p.first.first;
                int y1=p.first.second;
                int flag=0;
                if(x1+(s+1)<=(l+1)&&y1+(s+1)<=(l+1))
                {
                    for(int k1=0;k1<=s;k1++)
                    {
                        for(int k2=0;k2<=s;k2++)
                        {
                            if((b[k1][k2]==1&&mp.find({x1+k1,y1+k2})==mp.end())||(mp.find({x1+k1,y1+k2})!=mp.end()&&b[k1][k2]==0))
                            {
                                flag=1;
                                break;
                            }

                        }
                    }
                    if(!flag)
                    {
                        cnt++;
                    }
                }

    }
    cout<<cnt;

}
<think>好的,我现在需要回答用户关于CCF-CSP比赛规则或赛制的问题。用户已经提供了四个引用来源,我需要仔细分析这些信息,并整理出一个结构清晰的回答。 首先,我要确认用户的问题核心是CCF-CSP的赛制规则,可能包括认证级别、考试内容、评分规则、认证时间和形式等方面。接下来,我需要从提供的引用中找到相关信息。 引用[1]提到CCF CSP认证是计算机软件能力认证,属于职业资格认证。引用[2]指出CSP-J/S分两个级别,不设年龄限制,面向非专业级。引用[3]补充了CSP-JS分为入门组和提高组,涉及算法和编程,并且提到了GESP一级认证的情况。引用[4]则强调了需要扎实的基础知识和实践经验,无论是个人还是团队参赛。 接下来,我需要将这些信息整合成几个关键点。比如,认证级别分为CSP-J和CSP-S,考试内容可能包括算法和编程题,评分规则可能涉及题目得分和等级评定,认证时间可能每年举办,形式为机试。 需要注意的是,用户提供的引用中没有详细的评分细则,比如每题分值或通过标准,所以可能需要说明具体评分规则需参考当年公告。同时,引用[2]提到了第二轮认证,可能说明赛制分为初赛和复赛,但需要确认是否适用于所有级别的认证。 另外,引用[3]提到了GESP Python认证一级,这可能与CSP不同,但用户问题集中在CSP上,所以可以暂时忽略这部分,除非有直接关联。 整理时还要确保回答结构清晰,分点列出,并自然地添加引用标识。最后,生成的相关问题需要与CCF-CSP的赛制相关,比如认证难度、备考方法、与其他竞赛的区别等。 现在需要检查是否有遗漏的信息或可能的错误。例如,引用[2]提到CSP-J/S2020第二轮认证,可能意味着CSP-J/S分为两轮,但引用[4]没有明确说明,因此需要谨慎表述,指出通常分为两轮,但具体以官方公告为准。 总结下来,回答应包含以下几个部分:认证级别、考试内容、评分规则、认证时间和形式,以及注意事项。每个部分引用对应的来源,并在末尾生成相关问题。</think>### CCF CSP比赛规则与赛制详解 #### 1. **认证级别与分组** CCF CSP认证分为**非专业级别(CSP-J/S)**和**专业级别**。其中: - **CSP-J(入门组)**:面向算法和编程基础较弱的初学者。 - **CSP-S(提高组)**:面向有一定编程和算法能力的学习者[^3]。 - 专业级别认证(如GESP)则针对更高级别的编程能力评估,例如Python一级认证等[^3]。 #### 2. **考试内容** - **题型**:以算法和编程题为主,涵盖数据结构、动态规划、图论等计算机科学核心内容。 - **形式**:上机编程,需在限定时间内完成题目并提交代码[^4]。 - **难度分级**:CSP-J题目相对基础,CSP-S题目复杂度更高,涉及更深入的算法设计。 #### 3. **评分规则** - **得分机制**:每题按测试用例通过比例得分,例如某题有10个测试点,通过6个则得60%分数[^2]。 - **等级评定**:根据总分划分等级(如A/B/C),具体分数线由CCF官方在考试后公布[^2][^4]。 #### 4. **认证时间与形式** - **频率**:每年举办多轮认证,例如CSP-J/S通常分为初赛和复赛两轮。 - **初赛**:多为笔试或在线理论考试,筛选进入复赛的选手。 - **复赛**:上机编程实践,决定最终成绩[^4]。 #### 5. **参赛资格与注意事项** - **资格**:无年龄、职业限制,学生和在职人员均可报名。 - **团队参赛**:部分赛事允许团队协作,但需遵守具体规则[^4]。 - **认证用途**:CSP成绩可作为高校录取、企业招聘的参考依据[^1]。 #### 注意事项 - 具体赛制可能因年份调整,需以**CCF官方公告**为准。 - 编程语言通常支持C++、Java、Python等,需提前确认环境要求。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值