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是三四个月前机构做的题,那时可能我太唐了看了会题解,现在已经补上了,没看题解。

posted @ 2026-02-07 17:35  vivid/stasis  阅读(27)  评论(0)    收藏  举报