2/7 单元检测总结
T1
时间分配:合理。10min想出方法,10min想出输入(失败)
题会了,但不会输入哼啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
stringstream:可以自动识别string、int等类型,十分好用。
用法:
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::string str = "42 3.14159";
std::stringstream ss(str);
int num;
double pi;
ss >> num >> pi;
std::cout << "Number: " << num << std::endl;
std::cout << "Pi: " << pi << std::endl;
return 0;
}
T2
时间分配:合理,25min
会,打出来了,细节没考虑到,没注意大小为1的情况。
T3
时间分配:合理,20min看懂题(还是失败)
没看懂题,赛后看懂了,就是树上染色。
\[dp[u,0]=\sum_{v\in son(u)} \min(dp[v,0]-1,dp[v,1]);
\]
\[dp[u,1]=\sum_{v\in son(u)} \min(dp[v,1]-1,dp[v,0]);
\]
T4
时间分配:合理,45min打部分分+想正解(依旧失败)
做过的。文本。
首先我们先用两遍bfs求出直径的两个端点,再把整条直径找出来
然后对于每个直径上的点我们做一次dfs,求出不经过直径的以这个点源的路径的最大长度,一起取一个最大值,作为答案的最小值,这个步骤看上去是 \(O(N^2)\),而实际上我们对于整棵树上的每一个点只会跑一次,于是时间复杂度为 \(O(N)\)。
最后我们再以之前求得的最大值为左端点,直径的长度为右端点,二分答案,就可以很轻松的得出结果了。
反正我是这样做的,但考试的时候没打出来。
总结 & 改进
分数比预期低140tps,因为T1的输入和T4的链部分分没打,下次多给难题部分分留点时间。
总的时间分配和策略算是合理,就是要沉下心来仔细想,多练练思维。
还有就是高级一点的语法/基本知识也要自己去积累,想stringstream这种东西以前都没听说过。
T4是三四个月前机构做的题,那时可能我太唐了看了会题解,现在已经补上了,没看题解。

浙公网安备 33010602011771号