PTYJ错题总结
魔术社
1、算法思想维度
问题类型:贪心
错误原因:尝试使用 DFS,没想到可以贪心。
正确思路:求出每个数字的权位和,肯定将权位和大的数字变成值大的数字,由于有零,求出哪些数字可以变成 \(0\) 即不是某个大于二位的数字的首位,找一个可以变成 \(0\) 且权位和最小的数字变成 \(0\) 即可。
同类问题:
2、实现细节维度
边界问题:注意如果是 \(1\) 位数那么他的首位数字也是可以变成 \(0\) 的,不受前导零影响。
解题框架
signed main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> s;
int x = 1;
reverse(s.begin(), s.end());
for (char ch : s) cnt[ch - '0'] += x, x *= 10; // 计算数字 ch 的位权和
f[s.back() - '0'] = 1; // 标记首位不能变成 0
}
int mn = *min_element(cnt, cnt + 10);
for (int i = 0; i < 10; i++) { // 将最小的能变成 0 的数字变成 0
if (!f[i] && cnt[i] == mn) {
cnt[i] = 0;
break;
}
}
sort(cnt, cnt + 10);
for (int i = 0; i < 10; i++) ans += i * cnt[i]; // 计算答案
cout << ans;
}
3、数学建模维度
给定 \(n\) 个非负整数,可以对数字进行一次整体置换,要求不能出现前导 \(0\),求所有整数的最大总和。
复杂度计算:
- 计算位权和:\(O(n\log n)\)。
- 排序分配数字:\(O(10\log 10)\)。
- 总复杂度:\(O(n\log n+10\log 10)\)。
4、改进措施
- 要合理分配时间,不要做了后面的题,没做前面的题。
- 对这类前导零相关的问题不了解,以为要分类讨论很多,就不想写。
- 思考时要有条理,不要东想想西想想,浪费时间。
辩论社
1、算法思想维度
问题类型:贪心、回滚。
错误原因:把最大值数组的初始值设大,没有考虑到它要和 long long 类型比较。
正确思路:注意到操作肯定按 负数、max、正数,加法有可逆性,max 直接回滚即可。
2、实现细节维度
边界问题:注意把最大值数组赋值成 \(-10^{18}\),而非 \(-10^9\),痛失 \(20\) 分。
解题框架
struct Ds {
vector<int> mx;
inline void Add(int x) { // 加数
if (mx.size()) {
mx.push_back(max(x, mx.back()));
} else {
mx.push_back(x);
}
}
inline void Pop() { mx.pop_back(); } // 回滚
} st[kMaxN];
3、数学建模维度
复杂度计算:
- 计算:\(O(1)\)
- 回滚:\(O(1)\)
- 枚举操作:\(O(n)\)
- 总复杂度:\(O(n)\)。
4、改进措施
注意细节,对于
max,min注意下他跟那种类型操作,从而判断初始值。卡常题不要
#define int long long
园艺社
1、算法思想维度
问题类型判定:枚举优化
误判原因:遇到大分讨就畏惧,没有尝试化简问题逐个击破。
正确思路:
\(n^8\) 的枚举是简单的,考虑优化校验。
由于每次只会改动至多两个位置,所以直接维护每行元素出现次数即可。
再优化枚举位置,考虑到不满足要求的行和列总共覆盖的位置数量也不多,将这些可疑位置求出来,再暴力枚举其中两个。
最后优化枚举值,因为肯定将值改成行和列里都没出现过的值,维护异或和即可。
2、实现细节维度
边界条件:注意回滚时要注意顺序,以及最后输出时要按 \(x\) 顺序输出。
循环变量:循环枚举可疑点即可。
解题框架
cin >> n, m = (n + 1) * n / 2;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> b[i][j];
b[i][j] = (b[i][j] > n ? 0 : b[i][j]);
W(i, j, b[i][j]);
ps[i] += a[i][j], qs[j] += a[i][j];
}
}
C();
for (int i = 1; i <= n; i++) { // 找出可疑位置。
for (int j = 1; j <= n; j++) {
if (pc[i] != n || qc[j] != n) {
e.push_back({i, j, m - ps[i] + a[i][j]}), ans.push_back(e.back());
C(), ans.clear(); // 判断是否能通过一次操作完成。
}
}
}
for (int i = 0; i < e.size(); i++) { // 枚举要修改的两个不合法位置。
for (int j = i + 1; j < e.size(); j++) {
if (e[i][0] == e[j][0]) { // 找出修改成的值。
e[i][2] = m - qs[e[i][1]] + a[e[i][0]][e[i][1]], e[j][2] = m - qs[e[j][1]] + a[e[j][0]][e[j][1]];
} else {
e[i][2] = m - ps[e[i][0]] + a[e[i][0]][e[i][1]], e[j][2] = m - ps[e[j][0]] + a[e[j][0]][e[j][1]];
}
ans.push_back(e[i]), ans.push_back(e[j]);
C(), ans.clear(); // 判断是否合法。
}
}
3、数学建模维度
- 校验:\(O(1)\)。
- 枚举值:\(O(1)\)。
- 枚举位置:\(O(n^2)\)
- 总时间复杂度:\(O(n^2)\)
4、改进措施
- 对复杂问题不要怕
- 要有化简问题的能力
- 对于长难题,要把代码写的简洁,有利于调试。
PTYJ错题总结的更多相关文章
- Ajax与JqueryUI和EasyUI错题总结
Ajax与JqueryUI和EasyUI错题总结 正确答案A,解析:此题考察的是JQuery UI下的menu插件的使用,menu提供ui-state-disabled class 方法禁用任何菜单项 ...
- 错题集锦(二) -- Java专项
错题集锦(二) -- Java专项 标签(空格分隔): 找工作 JVM的内存模型 线程共享: 堆(Heap):主要存放一些对象实例 方法区(Method Area / Non-Heap):用于存储已被 ...
- objective-c 错题
//1, NSString *name = [[NSString alloc]initWithString:@"张三"]; NSLog(@"%d",[name ...
- hibernate错题解析
01 Hibernate错题分析 解析: 此题目考查的是对Hibernate中交叉连接的理解.HQL支持SQL风格的交叉连接查询,交叉连接适用于两个类之间没有定义任何关联时.在where字句中,通 ...
- 20175316盛茂淞 《java程序设计》第三周课堂测试错题总结
20175316盛茂淞 <java程序设计>第三周课堂测试错题总结 出现问题 错题总结 题目1 在Ubuntu中用自己的有位学号建一个文件,教材p87 Example4_15 1. 修改代 ...
- NOIp2014提高组初赛错题简析
总体分析 \(89pts\),粗略来看选择题错的比较多,\(-6pts\).同时又是尿性的填空杀扣了\(5pts\). 不过后面的两大题全对了还是可喜可贺 错题精析 单项选择T8 编译器的主要功能是( ...
- Java 整体测试重点题 错题积累
重点题 错题积累 1: 解析: %d:用来设置输出日志的日期和时间 %m:用来输出代码中指定的消息 %n:用来输出一个回车换行符 %l:用来输出日志事件的发生位置 %p:用来输出优先级 %f:用 ...
- Java多线程习题 ===重点 ,错题积累
多线程重点,错题分析 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: . 12: 13: 14: 15:
- S2 深入.NET和C#编程 笔试测试错题积累
---恢复内容开始--- <深入.NET平台和C#编程>内部测试题-笔试试卷错题积累 1: 1) 以下关于序列化和反序列化的描述错误的是( C). a) 序列化是将对象的状态存储到特定存储 ...
- 【笔试题】Java 易错题精选
笔试题 Java 易错题精选 1.写出下列程序的运行结果( )String 不变性Java 值传递 public class Test { public static void main(String ...
随机推荐
- 3-7softmax回归的简洁实现
3-7softmax回归的简洁实现 import torch from torch import nn from d2l import torch as d2l batch_size = 256 tr ...
- 自学stm32,需要会到什么程度能找到一份工作?
自学STM32,需要会到什么程度能找到一份工作?一个十年老兵的真心话 前言:一个改变命运的选择 每次有人问我"自学STM32到什么程度能找工作"这个问题,我都会想起十年前那个迷茫的 ...
- ETL知识了解并备份
大数据横行的时代,我们对数据越来越重视,从数据的采集.分析.展示每个过程关注进而针对客户完善数据.数据集成是把不同来源.格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享,是企业 ...
- flink 1.11.2 学习笔记(3)-统计窗口window
接上节继续,通常在做数据分析时需要指定时间范围,比如:"每天凌晨1点统计前一天的订单量" 或者 "每个整点统计前24小时的总发货量".这个统计时间段,就称为统计 ...
- 多项式全家桶(wjc)
FFT 准备自己写一个高精度的板子,但是不会 FFT 于是学一学 QaQ .窝还是太菜了,这都不会 . 明确问题 首先,来明确一下我们需要解决的问题:给定一个 \(n\) 次多项式 \(F(x)\), ...
- Gitlab 拉代码免帐密设置方法
通过 HTTP/HTTPS 拉取 GitLab 仓库时 免输入账号密码,可以用 GitLab 提供的 Personal Access Token(个人访问令牌) 来代替密码,或者设置 Credenti ...
- Mybatis之数据库连接+PageHelper分页插件+Mybatis-Plus插件
MyBatis Plus 教程(人人便成为) https://www.cnblogs.com/chch213/p/16320820.html 前言 ORM框架:对象关系映射 object relat ...
- 【攻防世界】pure_color
1. 首先下载附件,解压出来之后得到的是一张png图片.天哪!我看到了什么?竟然是一张白纸! 2. 从这一点来看很可能是隐写,果断丢到Stegsolve上去.左右查找在Blue plane 0 中找到 ...
- vant list 不断连续请求接口神奇原因
vant 官方文档 list 组件最下面 给了一个解决办法 ? 为什么会连续触发 load 事件? 如果一次请求加载的数据条数较少,导致列表内容无法铺满当前屏幕,List 会继续触发 load 事件, ...
- B . Medal Ranking -UCF Local Programming Contest 2015
https://nanti.jisuanke.com/t/43387 题意 奥运会,分别给出RU和US两国的 金牌 银牌 铜牌 数目 优先度 金牌>银牌>铜牌,其中一种相同则比较下一种,多 ...