不大会合集
理解还不大透彻,后期再补充
S atur
要变成萤火虫~
展开
-
Codeforces E. Tree Painting (树形dp & 换根)
传送门 题意: 给定一棵有 n 个结点的无根树,所有结点都是白色的。第一次操作可以随意使一个结点染成黑色,之后每次操作可以使一个与黑色结点相邻的白色结点变成黑色。 每次操作可以获得的权值为被染成黑色的白色结点所在的白色连通块的结点数量。求可以获得的最大权值。 思路: 最开始我以为选哪儿都一样,都是n到1的和,后面才知道是俺太菜了。 只要确定第一个黑点后权值就确定了,所以这就是个选择根节点的树形dp题。 但显然如果要每个节点都dfs求答案绝对超时,于是需要推算下换根公式预处理下。这里可以参考大佬博客,讲得原创 2020-08-21 22:26:41 · 295 阅读 · 0 评论 -
C.有向无环图(构造 / 特定路径数的有向图) (智算之道复赛高校组)
传送门 思路: 个人觉得应该要用到前缀和。 骗分代码(60分): #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii pair<int, int> #define lowbit(x) (x &(-x)) #define ls(x) x<<1 #define rs(x) (x<原创 2020-08-09 22:40:27 · 260 阅读 · 0 评论 -
B. 网格(dp / 二维偏序问题) (智算之道复赛高校组)
传送门 思路: 显然若w2 > w1*2的话,魔法点就没有什么意义了。 在听了学姐说的k^2建图后,个人觉得只需要考虑k个魔法点,但是不知道为什么就是只有20分,呜呜。 代码实现: #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii pair<int, int> #define lowbit(原创 2020-08-09 22:30:06 · 229 阅读 · 0 评论 -
1009. Divisibility (数学) 2020 Multi-University Training Contest 6
传送门 思路: 若b%x == 1则答案为T,反之答案为F。 代码实现: #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii pair<int, int> #define lowbit(x) (x &(-x)) #define ls(x) x<<1 #define rs(x) (x<原创 2020-08-08 02:06:33 · 374 阅读 · 0 评论 -
1009.Paperfolding (数学 / 折纸 / 期望) 2020 Multi-University Training Contest 5
传送门 思路: 题意:有一片纸,你可以对它进行向上、向下、向左、向右对折这四种操作。再将对折之后的纸片按中心十字架剪开。时问你能剪出来的纸片的期望个数为多少? 官方题解: 若a表示横向对折次数,b表示纵向对折次数,则最终纸片数为(2^a + 1)*(2^b+1) 大佬推公式。 代码实现: #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long l原创 2020-08-06 00:19:17 · 225 阅读 · 0 评论 -
1012. Set1 (数学 / 概率) 2020 Multi-University Training Contest 5
传送门 思路: 题意:对于一个[1,n]的集合,每次删除最小元素后再随机删除一个元素知道集合只剩一个元素。输出每个元素的遗留概率。 官方题解: 代码实现: #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii pair<int, int> #define lowbit(x) (x &(-x))原创 2020-08-04 22:40:11 · 814 阅读 · 3 评论 -
1001.Tetrahedron (数学 / 几何计算) 2020 Multi-University Training Contest 5
传送门 思路: 题意:从[1,n]随机生成直角四面体的三边,求顶点到底面高h的 1/(n^2). 官方题解思路1: 官方题解思路2: 代码实现: #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii pair<int, int> #define lowbit(x) (x &(-x)) #de原创 2020-08-04 20:49:03 · 276 阅读 · 0 评论 -
B.Mask Allocation (gcd & 规律) 2020牛客暑期多校训练营(第七场)
传送门 思路: 题意:将n*m个口罩分装到经量少的盒子,使得既能均分成n份又能均分成m份。 设m <= n,则前m个答案必定为m个m,大了分不了,小了又非最优,再继续考虑后n - m个和m个。 还发现了 dfs做法 和 gcd的辗转相除思路。 代码实现: #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii原创 2020-08-02 23:07:40 · 124 阅读 · 0 评论 -
H. Dividing 2020牛客暑期多校训练营(第七场)
**传送门** 思路: 题意:定义传奇元组: (1,k)始终是传奇元组。 如果(n,k)是传奇元组,(n+k,k)与(nk,k)也是传奇元组。 我们想知道1≤n≤N,1≤k≤K时传奇元组(n,k)的数目。 官方题解: 如果n是k的倍数,即n=xk,那么可以减掉(x-1)个k,将n变为k,再/k为1。而如果n-1是k的倍数,即n=xk+1,那么x次除k就行。 详细可参考大佬题解。 代码实现: #include<bits/stdc++.h> #define endl '原创 2020-08-02 00:16:50 · 153 阅读 · 0 评论