PTYS错题
鸡魂传递
1、算法思想维度
问题类型:数学,二维偏序
误判原因:已经推出公式,没有考虑到正难则反,然后化为二维偏序。
正确思路:推出公式,然后将相交变成不相交,用离散化+树状数组计算顺序对。
2、实现细节维度
边界条件:注意 \(i\) 移动结束了也没碰到 \(j\) 开始,这种情况不是二维偏序,要单独处理。
解题框架
for (Pii o : q) {
int t = o.first, x = o.second;
int l = lower_bound(p.begin(), p.end(), Pii{t + x - s, -kInf}) - p.begin();
int r = upper_bound(p.begin(), p.end(), Pii{t + s - x, kInf}) - p.begin();
int pos = lower_bound(l_.begin(), l_.end(), x - t + s) - l_.begin() + 1;
if (r >= 1) {
v[r - 1].push_back({pos, 1});
} if (l >= 1) {
v[l - 1].push_back({pos, 0});
}
}
3、数学建模维度
复杂度计算:
- 构建二维偏序:\(O(n)\)
- 排序:\(O(n\log n)\)
- 二维偏序:\(O(n\log n)\)
4、改进措施
要由条件思考方法,想怎样才能将式子化成相似类型。
算力要加强,不能在求式子上浪费太多时间。
贤鱼爱鲲
1、算法思想维度
问题类型:二分、前缀和
误判原因:没想到一个区间延后的要求,导致只能写暴力。
正确思路:二分出第一个冲突的线段,由于延后的线段肯定是连续的,二分出最后一个延后的线段即可。
2、实现细节维度
边界条件:可以虚拟一个线段 \(\{2\times 10^9,2\times 10^9\}\),放在 \(n + 1\),使得代码更加简洁。
解题框架
a[n + 1] = {2e9, 2e9};
sort(a + 1, a + n + 1); // 按右端点排序
for (int i = 1; i <= n; i++) {
pre[i] = pre[i - 1] + a[i].first - a[i].second; // 计算前缀和
t[i] = a[i + 1].second - pre[i];
}
for (int s, e; q--;) {
cin >> s >> e;
int p = lower_bound(a + 1, a + n + 1, Pii{s + 1, 0}) - a; // 找到冲突线段
if (a[p].second >= e) { // 没有线段和他冲突
cout << "0\n";
continue;
}
cout << lower_bound(t + 1, t + n + 1, s - pre[p - 1] + e - s) - t - p + 1 << '\n'; // 找出最后一个延后的线段。
}
3、数学建模维度
复杂度计算:
- 排序:\(n\log n\)。
- 二分:\(n\log n\)。
- 总复杂度:\(n\log n\)。
4、改进措施
分析题目的性质,才能找出解法。
对于求出答案困难判定简单,可以二分。
深度寻鲲
1、算法思想维度
问题类型判定:BFS、分层图。
误判原因:没计算复杂度,误以为Dijkstra可过。
正确思路:考虑值域范围很小,利用BFS性质,用 vector 存储每一层的状态,枚举层数去转移。
2、实现细节维度
边界条件:由于最优化属性最多只会增加 \(50\) 考虑只维护 \(d \mod 50\) 内的状态去转移,这样加入初始状态时需要根据当前值去动态增加,双指针即可,另外这题及其卡空需要使用 short。
解题框架
memset(d, 0x3f, sizeof d);
for (int d_ = 0, j = 1, c = p; c; d_++) { // 枚举最优化属性
for (; j <= p && s[j].first == d_; e[d_ % kMaxK].push_back(s[j++].second)); // 双指针动态加入状态
for (int i = 0; i < e[d_ % kMaxK].size(); i++) {
Node o = e[d_ % kMaxK][i];
if (o.x >= 1 && o.x <= n && o.y >= 1 && o.y <= m && o.t <= T && d_ < d[o.x][o.y][o.t]) { // 判断状态是否合法
d[o.x][o.y][o.t] = d_;
for (int i = 0; i < 4; i++, c++) {
int nx = o.x + kD[i][0], ny = o.y + kD[i][1];
e[(d_ + a[nx][ny]) % kMaxK].push_back({short(nx), short(ny), o.t + short(a[nx][ny] == 0)}); // 转移
}
}
}
c -= e[d_ % kMaxK].size();
e[d_ % kMaxK].clear();
}
3、数学建模维度
复杂度计算:
- 起始位置排序:\(O(p\log p)\)。
- 枚举最优化属性:\(O(nmv)\)。
- 双指针处理起始位置:\(O(p)\)。
- 状态数量 \(O(nmt)\)。
- 查询数量 \(O(q)\),处理 \(O(t)\),总共 \(O(qt)\)。
- 总复杂度:O(p\log p+nm(v+t)+q*t)。
4、解题框架提炼
写完程序要计算时空复杂度,不要想当然。
对于这类值域范围小的最短路,可以使用分层图,是第一次接触,平时没有举一反三,一题多解的行为。
对于一些优化代码空间复杂度的 Trick 不是很了解。
天命悟鲲
1、算法思想维度
问题类型判定:最长上升子序列、回滚
误判原因:对最长上升子序列的了解不够深入,导致只能写暴力。
2、实现细节难度
边界条件:有 \(q[x] \le p[x]\) 的情况,这时答案为 \(0\)。
3、数学建模维度
复杂度计算:
- 从右往左枚举位置 \(O(n)\)。
- 求当前位置的最长下降子序列长度 \(O(\log n)\)。
- 记录长度序列中旧的信息并更新 \(O(1)\)。
- 从左往右枚举位置 \(O(n)\)。
- 求当前位置的最长上升子序列长度 \(O(\log n)\)。
- 更新左边长度序列的信息并重算贡献 \(O(1)\)。
- 回滚右边长度序列的信息并重算贡献 \(O(1)\)。
- 总时间复杂度为 \(n\log n\)。
PTYS错题的更多相关文章
- 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 ...
随机推荐
- C# dataTable 操作 上移 下移
https://blog.csdn.net/CSDN2016DDDD/article/details/80226755 上移:DataRow newdata = dt.NewRow();newdata ...
- C# Post 使用(multipart/form-data)请求数据
public static string HttpPostMultipartFormData(string url, NameValueCollection kVDatas, string metho ...
- 论文解读:MASS-EDITING MEMORY IN A TRANSFORMER(MEMIT)
论文发表于人工智能顶会ICLR(原文链接).在模型编辑方法中,过去工作主要局限于更新单个事实.因此,基于ROME,本文开发了MEMIT,在大模型GPT-J(6B)和GPT-NeoX(20B)上实现 ...
- wr30u刷机刷三方系统
前置工作 准备文件 提前下载好本教程中用到的所有资源 为了方便大家,我都整理好了,点击这里不限速免费下载. 说一下资料来源,感兴趣的可以看一下: hanwckf_uboot:第三方uboot,来自于h ...
- springBoot2.x启用https和兼容http
前言之前我嫌弃tomcat(spring)项目,开启https麻烦,所以一直都是nginx代理为https.今儿突然不想了.在springBoot2.x的情况下,直接开启https,并兼容http方式 ...
- C++ 临时变量的释放规则
简介 临时变量是在什么时候进行释放的呢? 委员会将注意力集中到"语句结束位置",很自然的,这种选择被通俗地称做 EOS (End Of Statement) .问题是如何精确定义 ...
- CGI 简单的python显示的页面
简介 python 进行服务器的页面的显示 cgi common gateway interface 公用网关接口 简单操作 python3 -m http.server --cgi 8001 新建一 ...
- vue 不完美的多标签页解决方案
背景 多标签页多用在中后台管理系统,能够让用户同时打开多个标签页,而且不会丢失之前填写的内容,操作起来会比较方便.虽然部分开源项目有多标签页的功能,但就体验来看,算不上特别好. 目标 可以通过rout ...
- AI智能体时代,看华为云AI原生应用引擎2.0——Versatile如何脱颖而出,面向千行万业,打造最佳企业Agent平台
本文分享自华为云社区<AI智能体时代,看华为云AI原生应用引擎2.0--Versatile如何脱颖而出,面向千行万业,打造最佳企业Agent平台>,作者:开天aPaaS小助手Tracy ...
- GROOVY 泛型
class Example{ static void main(String[] args) { List<String> list = new ArrayList<String&g ...