CSP-J 2024第二轮上机真题

CSP-J 2024真题已出,整体上看,今年的题目也还好:

T1应该说比较简单,没有什么太复杂的,只要会循环、分支、数组,肯定就会做了;

T2稍微复杂一点,不过如果选手练过传统的走迷宫之类的题目,应该说也不难,在走迷宫的过程中,标记有多少个位置即可;

T3应该难一些了,需要花比较多的时间想清楚,用贪心、动态规划的一些思想;

T4要把题目读懂还是需要花点时间的,估计很多选手有难度。

静等洛谷之类的在线OJ。

今年的分数应该也不会低,全国线估计跟去年持平或者高一点?

### 2024CSP上机考试真实目概述 关于2024年的CSP-S第二轮上机真题,整体难度被认为适中,前几道目可以在以往的竞赛目中找到相似之处[^1]。 #### T1 扑克牌 (Poker) 此的核心在于模拟操作以及使用桶数组来解决问。具体来说,通过创建一个标记数组`vis`,其中`vis[a][b]`表示是否存在一张花色为a、数值为b的扑克牌。统计这个数组中的元素数量`cnt`,最终答案即为52减去`cnt`。该算法的时间复杂度为O(n)[^2]。 ```cpp #include <bits/stdc++.h> using namespace std; bool vis[4][13]; int main() { int n, cnt = 0; cin >> n; while (n--) { char c; int num; cin >> c >> num; --num; if(c=='D') vis[0][num]=true; else if(c=='H') vis[1][num]=true; else if(c=='S') vis[2][num]=true; else if(c=='C') vis[3][num]=true; } for(int i=0;i<4;++i){ for(int j=0;j<13;++j){ if(vis[i][j]) ++cnt; } } cout << 52-cnt; } ``` #### T2 地图探险 (Explore) 这是一道基于模拟的操作,主要考察选手如何处理方向变化和路径追踪的能力。利用布尔类型的访问矩阵`vis`可以有效地跟踪已经走过的格子位置,从而避免重复计算或陷入死循环。本的时间复杂度同样被控制在了线性级别O(n+k),这里k代表地图尺寸。 ```cpp // 假设输入数据结构已经被定义好 char dir[]={'N','E','S','W'}; pair<int,int> move[]={{-1,0},{0,1},{1,0},{0,-1}}; map<char,int> dirmap={ {'N',0},{'E',1},{'S',2},{'W',3} }; vector<vector<bool>> vis(k,vector<bool>(k,false)); for(auto& cmd : commands){ if(cmd.first=='F'){ nx+=move[dir_idx].first; ny+=move[dir_idx].second; // 边界条件判断... vis[nx][ny]=true; }else{ dir_idx=(dir_idx+(cmd.second==90?1:-1)+4)%4; } } ``` #### T3 小木棍 (Sticks) 当面对较小规模的数据集时(如n≤7),可以通过预先设定的结果表快速得出结论;而对于更大范围内的情况,则需采用更复杂的策略——优先考虑放置较少数量的小木棍,并尽可能先安排较大的数字(比如8)。之后再依据剩余的小木棍数目进行调整优化,以形成最小可能值。整个过程遵循贪心原则构建最优解方案,其时间复杂度大约为O(n/7)[^2]。 ```cpp if(N<=7){ printf("%d\n",ans[N]); }else{ string res=""; while(N>=8){res+="8"; N-=8;} switch(N%7){ case 0:break; case 1:res='7'+res;break; case 2:res='16'+res;break; case 3:res='77'+res;break; case 4:res='166'+res;break; case 5:res='777'+res;break; case 6:res='1666'+res;break; } reverse(res.begin(),res.end()); cout<<res<<"\n"; } ``` T4部分似乎存在一些混淆或者重复描述,在上述整理的信息里并未给出完整的第四说明,请参照官方发布的正式文档获取最准确的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值