【CSP】 201912-2 回收站选址

试题编号: 201912-2
试题名称: 回收站选址
时间限制: 1.0s
内存限制: 512.0MB

需要注意的细节:

在这里插入图片描述
在这里插入图片描述

#include <bits/stdc++.h> // 包含所有标准库头文件
using namespace std;

#define ll long long // 定义 ll 为 long long 的别名

vector<int> score(10, 0); // 初始化一个大小为 10 的向量,所有元素初始值为 0
map<pair<ll, ll>, bool> mp; // 定义一个 map,键为一对 long long 类型的数,值为 bool 类型
vector<pair<ll, ll>> points; // 定义一个存储坐标对的向量

// 判断坐标 (x, y) 是否被上下左右四个方向的点包围
bool isable(ll x, ll y)
{
    return mp[{x + 1, y}] && mp[{x - 1, y}] && mp[{x, y + 1}] && mp[{x, y - 1}] ? true : false;
}

// 计算坐标 (x, y) 的得分,得分为其四个对角线方向上存在的点的数量
int getscore(ll x, ll y)
{
    int score = 0;
    if (mp[{x + 1, y + 1}]) // 右上角
        score++;
    if (mp[{x + 1, y - 1}]) // 右下角
        score++;
    if (mp[{x - 1, y + 1}]) // 左上角
        score++;
    if (mp[{x - 1, y - 1}]) // 左下角
        score++;
    return score;
}

int main()
{
    int n;
    cin >> n; // 输入点的数量
    for (int i = 0; i < n; i++)
    {
        ll x, y;
        cin >> x >> y; // 输入每个点的坐标
        mp[make_pair(x, y)] = true; // 将点存入 map 中
        points.push_back(make_pair(x, y)); // 将点存入向量中
    }
    for (auto it : points)
    {
        ll x = it.first;
        ll y = it.second;
        if (isable(x, y)) // 如果点 (x, y) 被上下左右四个方向的点包围
        {
            score[getscore(x, y)]++; // 根据点 (x, y) 的得分更新 score 向量
        }
    }
    for (int i = 0; i < 5; i++)
    {
        cout << score[i] << endl; // 输出得分为0 1 2 3 4的点的数量
    }
    return 0;
}```

### CSP 评分规则与分数分配 CSP 认证的评分机制主要基于参赛者在两轮测试中的表现来决定最终成绩。以下是关于 CSP-J/S 的具体评分规则以及分数分配方式: #### 测试结构概述 CSP-J 和 CSP-S 是中国计算机学会 (CCF) 组织的信息学能力认证考试,分为两个阶段:第一轮为笔试形式,考察基础理论知识;第二轮则通过编程解决问题的能力进行评估[^1]。 #### 第二轮评级规则及分数线设定 - **晋级比例控制** CCF 根据各省报名人数和地区发展水平差异制定不同的晋级名额计划。全国统一命题但允许地方调整部分细节以适应本地情况。 - **题目难度分布** 题目设计覆盖广泛知识点,包括但不限于排序、查找、数据结构(如栈队列)、基本算法思想(枚举法、贪婪算法)直至更复杂的动态规划和高级专题(线段树等)。这种多层次的设计旨在全面衡量选手技能水平[^2]。 #### 得分计算方法 对于每道程序设计试题而言,评测系统依据标准输入输出对比得出得分点数。通常情况下: - 单个案例满分可能设置成一定整数值比如 `10` 或更高; - 如果提交代码能够正确处理特定范围内的所有样例,则获得相应子任务全部积分; - 否则按实际匹配程度给予部分信用度。 举例说明,在解决“回收站选址”这一类问题时,假设总分为 `100` 分,其中可能存在多个独立的小问或者条件分支分别计分。下面给出一段简化版实现逻辑作为参考[^3]: ```cpp #include <bits/stdc++.h> using namespace std; int main(){ int n, a, b; cin >> n >> a >> b; vector<pair<int, int>> vecA(a), vecB(b); for(auto &[idx,val]:vecA){ cin>>idx>>val; } sort(vecA.begin(), vecA.end()); unordered_map<int,int> mp; for(int i=0;i<b;++i){ cin>>vecB[i].first>>vecB[i].second; if(mp.find(vecB[i].first)!=mp.end()) continue; mp[vecB[i].first]=vecB[i].second; } long long res =0 ; for(const auto& p : vecA){ if(mp.count(p.first)){ res +=(long long)p.second * mp[p.first]; } } cout<<res; } ``` 上述代码片段展示了如何高效读取并存储两组关联数组的数据,并利用哈希表加速查询操作从而快速统计符合条件的结果数量乘积之和。 #### 总结 综上所述,CSP 考试采用严格的多级评审体系确保公平公正的同时也鼓励学生深入学习掌握扎实的基础知识与灵活运用技巧相结合才能取得理想的成绩。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值