![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多校
cysjiang
这个作者很懒,什么都没留下…
展开
-
HDU 6121 Build a tree
题意:给你一个n个节点的k叉树,每个节点的值为以其为根节点的子树的节点数。问所有节点的异或值是多少。 分析:算是模拟吧,就从下递推到上面就行。除了最后一层外,每层的节点最多有三种,第一种是以这个节点为根的子树是一颗满k叉树;第二种是不满的k叉树,这种在每一层最多只有一个;第三种是也是满k叉树,但是会比第一种少一层。边推边异或就好了 。#include<cstdio>using namespace原创 2017-08-16 14:40:50 · 473 阅读 · 0 评论 -
51nod1288 汽油补给
这不是就noip旅行家的预算吗。只不过这个每公里消耗一升油,感觉更简单了些。 贪心,每次找一个点后面第一油价比它低的点,想办法到那里让油全部用完。找它后面第一个比它价格低的点可以用单调栈处理。#include<stdio.h>#include<stack>#include<iostream>using namespace std;typedef unsigned long long ll;原创 2017-08-12 13:05:34 · 372 阅读 · 0 评论 -
HDU 6105 Gameia(2017多校第6场1010)
题意:给出一颗树,Alice 和 Bob 轮流给树节点染色。Alice将没有被染色的节点染成白色,Bob染成黑色,并且Bob染色的时候会把所有跟他选定的节点相连的节点染成黑色。如果树上的节点都被染色了,那么游戏就结束。结束的时候如果还有白色,Alice就获胜,否则Bob获胜。分析: 首先当有一条长度大于等于3的链的时候,Alice一定可以获胜。可以找出来3 和 4 的时候这个结论是成立的。(3的时原创 2017-08-10 18:13:29 · 276 阅读 · 1 评论 -
hdu 6044 Limited Permutation
题意:给你n个限制,让你求长度为n的排列列有多少种。每个限制描述为,从li 到 ri这段区间,ai为最小值。分析:对于一个描述为[1,n] 的限制,它所对应的位置一定是1到n的最小值也就是1,那么这个位置就把区间分成了两份。假设这个位置左边有k个,然后从剩下的n-1个数中选出k个放在左边,都是符合题意的。然后把两个小区间做同样的处理。就得到了答案。#include <cstdio>#include原创 2017-08-11 14:41:22 · 252 阅读 · 0 评论 -
HDU 6143 Killer Names
题意:每个人的名字由两部分组成,每部分的长度是n,给你m种字符,最多能构成多少个人的名字。 分析:就是一个组合数。如果n个长度用x个字符表达,那就相当于n个不同小球放在x个不同的小球。设其结果为f(x),那么f(x) = x ^ n - C(x, 1) * f(x - 1) - C(x, 2) * f(x - 2) …… - C(x, x - 1) * f(1). 然后就枚举两边各用了多少种字符原创 2017-08-17 18:21:58 · 719 阅读 · 2 评论 -
2017多校第一场1006 function(HDU6038)
题意: 给你一个a序列,代表1到n的排列;一个b序列代表1到m的排列。问你可以找出多少种函数关系,满足f(i)=b[f(a[i])]; 分析:这个主要是找循环节 比如说:如果 a 序列是 2 0 1 那么我们可以发现 f(0) = b[f(a[0])] = b[f(2)] f[1] = b[f(a[1])] = b[f(0)] f[2] = b[f(a[2])] = b[f(1原创 2017-07-25 17:55:02 · 1883 阅读 · 0 评论 -
hdu6060 RXD and dividing
题意:将节点2到n分成k部分,然后对于每一部分都加上1号节点。在原图中选取一些边,让这一部分内部联通。问怎么分能使花费最大。 分析:如果一个点的子节点被分成各个部分,那么从它走到1号节点的部分就会走k遍,所以尽量让一个节点的子节点分成更多的部分。#include<cstdio>#include<queue>#include<cstring>#include<algorithm>#inclu原创 2017-08-09 20:20:25 · 173 阅读 · 0 评论 -
hdu 6058 Kanade's sum
题意:给你一个一个数列。问1到n所有子区间中第k大值得和是多少。 分析:可以美枚举每一个数,计算它可以做多少次第k大值。因为k很小,所以可以枚举一个数,找到它前面第k个比它大的数和后面第k个比它大的数,然后计算。找的时候可以用单调栈维护。#include<cstdio>#include<stack>#include<cstring>using namespace std;typedef lo原创 2017-08-09 19:25:58 · 164 阅读 · 0 评论 -
hdu 6073 Matching In Multiplication
题意:给出一个“二分图”,左边顶点的数目和右边相同,求这个二分图所有完美匹配的权值和。题目保证至少有一组完美匹配。 分析:如果图中存在度数为1的点,那么与这个点匹配的点就是确定的。用拓扑排序去除这些点之后,图中留下的一定是一个环,那么每隔一条边取一条就能构成完美匹配。#include<cstdio>#include<vector>#include<queue>#include<cstring原创 2017-08-09 18:56:18 · 220 阅读 · 0 评论 -
HDU 6129 Just do it
题意:给你一个序列,让你求n次前缀异或之后的最终序列。 分析:很菜,不知道怎么搞,标程也没看懂,不过看了这篇博客之后才明白怎么搞了。 for(int i = 1; i <= n; i++){ ll nn = m + i - 2, mm = i - 1; if((nn & mm) == mm){ for(i原创 2017-08-16 16:49:44 · 383 阅读 · 4 评论 -
hdu 6092 Rikka with Subset
自己还是好菜啊。没想到背包。#include<cstdio>#include<cstring>using namespace std;const int maxn = 1e5;typedef long long ll;ll a[maxn];ll f[maxn];ll c[maxn];int main(){ ll T, n, m; scanf("%lld", &T);原创 2017-08-09 11:44:02 · 249 阅读 · 0 评论 -
hdu 6170 Two strings
题意:给你两个字符串,第一个是普通的字符串,第二个中含有“点”和 “星”,“点”可以匹配任意一个字符,“星”可以让它前面的字符出现若干次。问你两个字符能不能匹配。 分析:我是用dp 写的,类似于最长公共子序列。状态开了三维,其实开两维就可以。f[i][j][k] 表示 第一个字符的前i个字符和第二个字符串的前j个字符匹配。k = 0 表示 字符和字符匹配,k = 1表示点和字符匹配,k = 3表原创 2017-08-22 17:32:36 · 926 阅读 · 0 评论