「考试总结」ZROI-21-NOIP冲刺-TEST11 总结
#T1 因子差
Time Limit: 1s | Memory Limit: 512MiB
#题意简述
认为一个数是有趣的,当且仅当:
- 这个数是一个正整数;
- 这个数至少有 \(4\) 个不同的因子;
- 这个数的任意两个因子之间的差都不小于 \(n(n\leq10^5)\) 。
问最小的有趣的数是多少。多组数据。
#大体思路
首先一个数 \(x\) 必然有两个因子 \(1\) 和 \(x\),于是我们只需要让第一个因数 \(p_1\) 是大于等于 \(n+1\) 的第一个质数,\(p_2\) 是大于等于 \(p_1+1\) 的第一个质数,不难证明这样必然是最优的(考虑一个非质数的因子),于是我们可以提前预处理出质数,然后 lower_bound
即可。
#Code
1 | const int N = 500010; |
#T2 生成树
Time Limit: 1s | Memory Limit: 512MiB
#题意简述
给定一个 \(n(n\leq1000)\) 个点的完全图,每次删去一个生成树,问最多能删多少次,并给出方案。
\(t(t\leq500)\) 组数据,保证满足 \(\sum n\leq1000\).
#大体思路
构造题,具体见代码。
#Code
1 | const int N = 100010; |
#T3 划分树
Time Limit: 3s | Memory Limit: 512MiB
#题意简述
给定一棵 \(n(n\leq10^5)\) 的树,每个节点有一个权值 \(w_i(w_i\leq10^9)\),给定 \(K(K\leq n)\),要求将整棵树通过断开 \(K-1\) 条边划分为 \(K\) 部分,使得到的森林的权值最小。
定义一棵树的权值为树上所有的节点的权值的和,一个森林的权值为森林中的所有树的权值中的最大值。
\(t(t\leq10^5)\) 组数据,保证 \(\sum n\leq2\cdot10^5\).
#大体思路
要求最大值最小,直接二分不亏,现在来考虑如何对于 \(x\) 进行判定。
设 \(f_i\) 表示以 \(i\) 为根的子树内满足条件至少需要断开多少条边,\(g_i\) 表示以 \(i\) 为根的子树与 \(i\) 相连的连通快的大小,然后对于每个 \(i\),贪心地选其中 \(g\) 小的一定更优。
于是直接 sort()
后 DP 即可,时间复杂度为 \(O(n\log^2n)\).
#Code
1 |
|
#T4
巨大恶心的可持久化数组维护分块的字符串题,咕咕咕~