CSP-S复赛前规划

  • 有人说今年ZJ的分数线是90+
  • 这样我还能进复赛吗
  • 如果进不了,我复赛准备什么呢
  • 早上联考,下午讲评+订正+刷题,晚上正睿。

十月份目标

  1. 刷完算阶(这很重要)
  2. 熟练各种基础板子
  • 最短路:FloydFloydFloydBellman−FordBellman-FordBellmanFordDijkstraDijkstraDijkstraSPFASPFASPFA
  • 最小生成树:primprimprimkruskalkruskalkruskal
  • 分治:二分答案,二分查找
  • 位运算
  • 排序算法
  • 字符串:KMPKMPKMPTrieTrieTrie树,ACACAC自动机
  1. 熟练运用各种STLSTLSTL
  • 栈(stackstackstack)(先进后出)
  • 队列(queuequeuequeue)(先进先出)
  • 优先队列(priority_queuepriority\_queuepriority_queue)(堆)
  • 双端队列(dequedequedeque
  • 平衡树(setsetset)(multisetmultisetmultiset
  • 映射(mapmapmap)(可代替hashhashhash表)
  • 随机数组(vectorvectorvector)(可用来实现邻接表)
  • lower_boundlower\_boundlower_boundupper_boundupper\_boundupper_bound(二分时候用)
  • 去重函数uniqueuniqueunique(可以用来离散化)

十一月目标

  1. 每天都要接触洛谷蓝以上难度的DP、图论、数论
  2. 掌握动态规划中的状态压缩DP、计数DP、树形DP与数位DP
  3. 进阶数据结构的模板
  • 树状数组
  • 线段树
  • 分块+莫队
  1. 图论
  • TarjanTarjanTarjan算法与图的连通性
  • 树的直径与LCALCALCA
  1. 数论
  • 矩阵乘法
  • 组合计数
  • 概率与数学期望
  • 博弈论
    当然最后几天是对我最薄弱的像是图论之类的进行一下复习
  • 我要学的东西好多啊
CSP-S复赛是计算机非专业级别软件能力认证(CSP)中针对提高级别的比赛。从提供的参考内容可了解到部分与CSP - S复赛真题相关的信息。 2024年CSP - S复赛T1“决斗”题目,其对应代码通过输入敌人数量和每个敌人的攻击范围,将攻击范围排序后使用双指针法计算最小未被消灭的敌人数量。代码中定义了最大敌人数量,使用数组存储敌人攻击范围,通过排序和双指针移动进行逻辑处理,最终输出结果[^1]。 ```cpp #include <bits/stdc++.h> using namespace std; const int N = 100005; // 定义最大敌人数量 int n, r[N]; // n: 敌人数量, r[N]: 存储每个敌人的攻击范围 int main() { // 输入敌人数量 cin >> n; // 输入每个敌人的攻击范围 for (int i = 1; i <= n; i++) cin >> r[i]; // 将敌人的攻击范围从小到大排序 sort(r + 1, r + n + 1); // 初始化答案为敌人总数(最坏情况) int ans = n; // 使用双指针法计算最小未被消灭的敌人数量 for (int i = 1, j = 2; i <= n; i++) { // 跳过所有攻击范围相同的敌人 while (j <= n && r[j] == r[i]) j++; // 如果找到攻击范围更大的敌人 if (j <= n && r[j] > r[i]) { j++; // 移动右指针 ans--; // 可以消灭一个敌人,总数减1 } } // 输出最终未被消灭的敌人最小数量 cout << ans << endl; return 0; } ``` 2023年CSP - S复赛真题“密码锁”,其100分代码通过输入密码锁状态,对只转动一个和转动相邻两个的情况进行枚举,将可能正确的密码放入桶中,最后统计桶中出现次数等于输入行数的密码数量作为答案[^2]。 ```cpp #include<bits/stdc++.h> using namespace std; int n; int a[6];//存储输入的n行密码锁状态 int c[100000];//桶 int calc(){ return a[1]*10000+a[2]*1000+a[3]*100+a[4]*10+a[5]; } int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=5;j++){ cin>>a[j]; } //只转动一个 for(int j=1;j<=5;j++){ for(int k=1;k<=10;k++){//循环10次恢复原样 a[j]=(a[j]+1)%10; if(k!=10) c[calc()]++; //把可能正确的密码放入桶内 } } //转动相邻的两个 for(int j=1;j<=4;j++){ for(int k=1;k<=10;k++){//循环10次恢复原样 a[j]=(a[j]+1)%10; a[j+1]=(a[j+1]+1)%10; if(k!=10) c[calc()]++; //把可能正确的密码放入桶内 } } } int ans=0; for(int i=0;i<=99999;i++){ if(c[i]==n) ans++; } cout<<ans; return 0; } ``` 2023年CSP - S复赛真题“消消乐”,其50分代码通过输入字符数组,枚举以每个位置开头的字符串,使用栈模拟消除过程,每次栈为空时答案加1[^3]。 ```cpp #include<bits/stdc++.h> using namespace std; int n,ans=0; char a[2000010]; int main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; //用字符数组存储 for(int i=1;i<=n;i++){//枚举以i开头的字符串 stack<char> s;//建栈 //用栈模拟消除 for(int j=i;j<=n;j++){ if(!s.empty() && s.top()==a[j]){ s.pop(); }else{ s.push(a[j]); } if(s.empty()) ans++;//每次栈为空,答案加1 } } cout<<ans; return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值