csp-游戏

该代码实现了一个算法,通过遍历并标记1到n的整数,找出哪些是k的倍数或末尾为k的数。核心函数check()用于判断条件,主函数通过计数器和标志位控制过程,最终输出未被标记的数。
#include<bits/stdc++.h>
using namespace std;

const int N = 1010;
int n,k;
bool visit[N];

bool check(int t)
{
    if(t%k==0 || t%10==k)
        return true;
    return false;
}

int main()
{
    cin >> n >> k;

    int num=1,cnt=n,flag=0;
    while(1)
    {
        for(int i=1;i<=n;i++)
        {
            if(!visit[i])
            {
                if(check(num)) //num是k的倍数或者末尾是k
                {
                    visit[i]=true; //被淘汰
                    cnt--;
                    if(cnt==1)
                    {
                        flag=1;
                        break;
                    }
                    num++;
                }
                else
                    num++;
            }
        }
        if(flag) break;
    }

    for(int i=1;i<=n;i++)
        if(!visit[i])
        cout << i << endl;

    return 0;
}
/*
In every life we have some trouble. When you worry you make it double.
Don't worry,be happy.
                 .-~~~~~~~~~-._       _.-~~~~~~~~~-.
             __.'              ~.   .~              `.__
           .'//                  \./                  \`.
         .'//                     |                     \`.
       .'// .-~"""""""~~~~-._     |     _,-~~~~"""""""~-. \`.
     .'//.-"                 `-.  |  .-'                 "-.\`.
   .'//______.============-..   \ | /   ..-============.______\`.
 .'______________________________\|/______________________________`.
*/
09-18
### CSP-S 算法竞赛概述 CSP-S(Certified Software Professional – Senior)是中国计算机学会(CCF)主办的信息学奥林匹克系列赛事中的提高组认证考试,主要面向高中阶段学生,考察其在算法设计、程序实现和问题分析方面的综合能力[^1]。 该竞赛分为两个部分:初赛与复赛。 - **初赛**为笔试形式,侧重理论知识考查,包括但不限于数据结构、算法原理、时间复杂度分析、离散数学基础等内容。 - **复赛**为机试形式,要求选手现场编写可运行并通过测试用例的程序,重点检验实际编码能力和调试技巧[^1]。 --- ### 主要考点分布 #### 一、基本语法与编程基础 掌握 C++ 是参加 CSP-S 的必备前提,尤其是 STL 容器(`vector`, `map`, `set`, `queue`)、输入输出优化(如 `scanf/printf` 或关闭同步流)以及函数封装习惯[^1]。 ```cpp #include <iostream> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); vector<int> a; int n; cin >> n; while (n--) { int x; cin >> x; a.push_back(x); } for (auto &v : a) cout << v << ' '; return 0; } ``` #### 二、核心算法模块 ##### 1. 排序与查找 常见排序算法的理解及其稳定性、时间复杂度比较;能熟练应用 `sort()` 函数配合自定义比较逻辑处理区间或对象排序问题[^1]。 ##### 2. 枚举与模拟 通过循环嵌套完成状态穷举,适用于小规模数据集的问题求解;模拟类题目注重细节控制,比如日期推算、游戏过程还原等[^1]。 ##### 3. 贪心策略 典型模型包括活动安排、背包问题简化版、任务调度等。需注意贪心选择性质是否成立,并辅以反证法验证正确性[^1]。 ##### 4. 动态规划(DP) 高频考点之一,覆盖线性 DP、背包型 DP、区间 DP 和树形 DP 基础形态。应熟悉状态转移方程构建方法,能够识别最优子结构性质[^1]。 ```cpp // 0-1 背包模板 const int MAXN = 1e3+5; int dp[MAXN]; for (int i = 0; i < n; ++i) for (int j = W; j >= w[i]; --j) dp[j] = max(dp[j], dp[j-w[i]] + v[i]); ``` ##### 5. 图论初步 涉及邻接表建图、DFS/BFS 遍历连通分量、拓扑排序、最短路(Dijkstra, SPFA)及最小生成树(Prim/Kruskal)。常用于解决路径查询、依赖关系等问题[^1]。 ##### 6. 数论与组合数学 模运算、最大公约数(gcd)、快速幂、素数判定、排列组合计数是基础知识要点。扩展欧几里得算法偶有出现于不定方程场景中[^1]。 ##### 7. 数据结构进阶 栈、队列、优先队列(堆)、并查集广泛应用。其中并查集支持按秩合并与路径压缩,在集合动态维护中有显著性能优势[^1]。 ```cpp struct UnionFind { vector<int> fa, rank; UnionFind(int n): fa(n), rank(n,1) { iota(fa.begin(), fa.end(), 0); } int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); } void merge(int p, int q) { int u = find(p), v = find(q); if (u != v) { if (rank[u] < rank[v]) swap(u,v); fa[v] = u; rank[u] += rank[v]; } } }; ``` --- ### 备考建议与学习路径 建立系统化的训练体系至关重要: - 初学者宜从洛谷 P 系列入门题起步,逐步过渡至 NOIP 历年真题; - 每日坚持刷题不少于两道,分类攻克各知识点盲区; - 对错题进行归档整理,记录错误原因与改进方案; - 参加线上虚拟比赛提升临场应对能力,适应限时压力环境[^1]。 推荐资源平台: - [Luogu](https://www.luogu.com.cn/) 提供大量中文题库与社区讨论 - [AcWing](https://www.acwing.com/) 含专题讲解视频与配套练习 - LeetCode 中文站可用于巩固基础数据结构操作 --- ### 近年命题趋势分析 近年来试题更加强调思维灵活性而非单纯码量堆积。例如: - 使用位运算替代布尔数组节省空间; - 结合前缀和技术降低暴力枚举的时间开销; - 设定边界特判条件防止越界访问引发 RE 错误[^1]。 同时,阅读理解能力也成为隐性考核维度——部分描述冗长的实际应用场景需要精准提取抽象模型。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁会没有丶遗憾呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值