【CSP】202209题解
2
-错误的:
-
-
|
-
-
|
正确的:
+1 如此编码
+🔗 题目:如此编码
+本来看到题目很迷茫来着,想着第一题怎么就那么难,后来发现题目最后有提示,看完之后醍醐灌顶, 【取模】 确实是很妙的思路,可以积累下来。
+ +代码忘存了QAQ。
+2 何以包邮
+🔗 题目:何以包邮
+🔴 【动态规划】 设 sum 为所有参考书价格总和,题目可以理解为在 sum-x 价格内,最大化被删除的书价格总和,这样就可以把这个问题看作经典的 01背包问题 。(要学会转化💥💥💥)
|
|
3
+3 防疫大数据
+🔗 题目:防疫大数据
+🟠🟠🟠 这道题读题有点绕,最重要的是选择合适的数据结构,然后一步一步分析。重要结构如下:
+✅ 首先考虑漫游数据 <d,u,r>,我们用结构 my 来存储,并构造一个 my 类型的容器存储风险用户: vector<my> u1
。这里之所以把 <d,u,r> 都存下来而不是只存 u,是为了方便后续判断用户某时某地的访问数据是否还有风险。
✅ 考虑风险地区。由于是否有风险是由日期、地区共同决定的, 我们使用 map<pair<int,int>,bool> mp
来表示某时某地是否有风险。 pair<int,int>
类型变量为键,存储地区、日期; bool
型变量为值,存储是否有风险。
✅ 由于最终结果要按用户编号从小到大输出,且同一用户只能输出一次,所以我们 选用有自动排序、自动去重功能的 set 容器 。
+🟡🟡🟡 解题步骤:
+✅ 清除 mp 中日期超过 7 天的记录,提高效率。( 注意删除时要用 it1,直接 erase(iter) 会报错 ,虽然我还不知道为什么QAQ)
+✅ 添加风险地区: mp[{p,j}]=1
✅ 更新以前日期的漫游数据中的风险用户。因为日期更新了一天,所以先前存的风险用户可能已经不再有风险了,需要更新。注意题目要求是 【对所有的 D∈[j.d, i],地区 j.r 都在风险范围内】 ,中间有任意一天不属于风险用户也要丢掉, 所以不能只看 j.d 或 i 那天是否为风险用户 。(如果中间某天非风险,则说明原来那条漫游数据无风险,只是后面某天用户又去了同一个地点,那个地点刚好仍有风险。这里有点绕,很容易出错QAQ)
+✅ 更新今天漫游数据中的风险用户。和上一步的方法类似。
+✅ 输出答案。取 u1 中的 u 加入答案 ans 中输出。之所以不直接输出 u1 中的 u ,是因为题目要求最终结果由小到大排列且无重复用户。
+🔵🔵🔵 在步骤 3 中,我们新开了一个 vector<my> u2
来存放符合要求的数据,并让 u1=u2,而不是在 u1 中直接删改,是因为可以避免频繁修改数组,提高效率
🟣🟣🟣 这种要求复杂、代码变量较多的题目,一定要自习检查变量是否用错,好几个 bug 都是因为容器索引的参数写错。 💢💢💢
|
|
Contents
【CSP】202212题解
1
-错误的
-
-
|
-
-
|
正确的
+1 现值计算
+🔗 题目:现值计算
+🔴 注意 s=s/(1+i) + a[j]
是从后往前更新的,一开始写成从 a[0] 到 a[n] 出了 bug。
|
|
2
-正确代码
+2 训练计划
+🔗 题目:训练计划
|
|
3
-错误代码(仍然不知道哪里错了
-
-
|
-
-
|
正确代码:
+3 JPEG解码
+🔗 题目:JPEG解码
+🟠 这种题目难度不是很大,但题目很长,需要把要求一步步分解,耐心计算即可。
+🟡 蛇形矩阵填充,由于本题矩阵大小固定,可以 用矩阵 idx[8][8] 来存储对应位置填充的元素下标 ,就可以很方便的完成存储。