摘要: Educational Codeforces Round 65 (Rated for Div. 2)题解 "题目链接" A. Telephone Number 水题,代码如下: Code cpp include using namespace std; typedef long long ll; c 阅读全文
posted @ 2019-05-16 21:50 heyuhhh 阅读(338) 评论(0) 推荐(1) 编辑
摘要: P3311 [SDOI2014]数数 思路: 因为这个题有多个串,所以我们可以考虑构建一个AC自动机,然后在AC自动机上面跑数位dp。 设$dp(i,j)$表示当前是第$i$位(从高到低),在AC自动机上面的第$j$个结点的合法情况总数。 同数位dp一样,看看当前这一位目前是否有限制,如果没限制,就 阅读全文
posted @ 2019-05-16 20:26 heyuhhh 阅读(193) 评论(0) 推荐(0) 编辑
摘要: P3121 [USACO15FEB]审查(黄金)Censoring (Gold) 思路: 首先构造AC自动机,然后那串去匹配,并且记录一下每一个字符匹配时在AC自动机上的位置。 如果成功匹配一个单词,那么就需要从串中删除这个单词,并且从之前标记的位置开始匹配。 因为单词的长度我们知道,所以直接利用一 阅读全文
posted @ 2019-05-16 20:15 heyuhhh 阅读(223) 评论(0) 推荐(0) 编辑
摘要: P3375 【模板】KMP字符串匹配 来一道模板题,直接上代码。 cpp include using namespace std; typedef long long ll; const int N = 1e6 + 5; int n, m; char s1[N], s2[N]; int nxt[N] 阅读全文
posted @ 2019-05-16 20:07 heyuhhh 阅读(167) 评论(0) 推荐(0) 编辑
摘要: P3193 [HNOI2008]GT考试 思路: 设$dp(i,j)$为$N$位数从高到低第$i$位时,不吉利数字在第$j$位时的情况总数,那么转移方程就为: \(dp(i,j)=dp(i+1,k)*a(j,k)\) 这里$a(j,k)$就是从第$j$位到第$k$位的情况总数。那么根据这个转移方程我 阅读全文
posted @ 2019-05-16 20:06 heyuhhh 阅读(251) 评论(0) 推荐(0) 编辑
摘要: P2606 [ZJOI2010]排列计数 因为每个结点至多有一个前驱,所以我们可以发现这是一个二叉树。现在我们要求的就是以1为根的二叉树中,有多少种情况,满足小根堆的性质。 设$f(i)$表示以$i$为根的子树中满足小根堆性质的情况,那么就有:$f(i)=f(ls) f(rs) C_{sum(i) 阅读全文
posted @ 2019-05-16 19:50 heyuhhh 阅读(179) 评论(0) 推荐(0) 编辑
摘要: P2657 [SCOI2009]windy数 数位dp模板题,这里要考虑到前导0的情况,考虑一下就行了。 代码如下: cpp include using namespace std; typedef long long ll; const int N = 55; ll bit[N] ; ll a, 阅读全文
posted @ 2019-05-16 19:40 heyuhhh 阅读(126) 评论(0) 推荐(0) 编辑
摘要: P2602 [ZJOI2010]数字计数 思路: 首先考虑含有前导0的情况,可以发现在相同的$i$位数中,每个数的出现次数都是相等的。所以我们可以设$f(i)$为$i$位数每个数的出现次数。 那么就有递推方程:$f(i)=f(i 1) 10+10^{i 1}$。 假设现在要求的数为$x$位,那么我们 阅读全文
posted @ 2019-05-16 19:38 heyuhhh 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 我们维护$d[i,0/1]$,其中$d[i,0]$表示从1到$i$号结点经过路径中的最小值,$d[i,1]$表示从$n$出发到$i$的最大值。之后可以考虑枚举中转站$i$,利用$d[i,1] d[i,0]$来更新答案即可。这样做的正确性就是这样可以覆盖所有的情况(肯定会经过一个中转站。 这里我用的d 阅读全文
posted @ 2019-05-16 19:29 heyuhhh 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 思路 题中给出的图有单向边和双向边,其中单向边边权可能为负,这其实就说明我们不能直接用dijkstra。(貌似可以双端队列优化的spfa水过去= = 注意到无向边边权是非负的,这提示我们可以在无向边上跑最短路。并且我们可以知道,如果将无向边连接的点缩为一点,最后图中只剩下有向边的话,这个图就是一个D 阅读全文
posted @ 2019-05-16 19:28 heyuhhh 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 如果考虑不算上新修的道路,那么答案显然为$2 (n 1)$。 考虑$k=1$的情况,会发现如果我们新修建一个道路,那么就会有一段路程少走一遍。这时选择连接树的直径的两个端点显然是最优的。 难就难在$k=2$的时候,还是上面的思路,首先肯定连接两个叶子结点最优。假设我们连接的是$x,y$两个叶子结点, 阅读全文
posted @ 2019-05-16 19:26 heyuhhh 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 将1号点从图中去掉过后,图会形成几个连通块,那么我们首先可以在这些连通块内部求最小生成树。 假设有$tot$个连通块,那么我们会从1号点至少选$tot$个出边,使得图连通。这时我们贪心地选择最小的,这应该都很好懂。 因为题目中的要求是度数不超过$s$,那么也就是说我们可以从1号点出发,再加入$s t 阅读全文
posted @ 2019-05-16 19:25 heyuhhh 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 这个题可以默认有前导0,然后那些位数比输入数据小的数就可以被一起统计了。 之后就从第一位开始往后面扫,对于每一位,看是否达到限制,没有的话剩下的数随便排列就行,那么此时我们需要解决的就是 可重集的全排列问题 ;如果达到限制就继续考虑之后的一位。 下面重点说下怎么解决可重集的全排列问题: 设$S=\{ 阅读全文
posted @ 2019-05-16 19:23 heyuhhh 阅读(179) 评论(0) 推荐(0) 编辑
摘要: Codeforces Round 560 (Div. 3) F2. Microtransactions (hard version) 题意: 现在有一个人他每天早上获得1块钱,现在有$n$种商品,每种商品最后需要$k_i$个;现在有$m$个打折信息,每个打折信息包含$d_i,t_i$,表示第$t_i 阅读全文
posted @ 2019-05-16 19:21 heyuhhh 阅读(254) 评论(0) 推荐(0) 编辑
摘要: Codeforces Round 558 (Div. 2)题解 A. Eating Soup 水题,直接给出代码。 Code cpp include using namespace std; typedef long long ll; const int N = 1e5 + 5; int n; in 阅读全文
posted @ 2019-05-16 19:12 heyuhhh 阅读(366) 评论(0) 推荐(0) 编辑
摘要: Educational Codeforces Round 64 (Rated for Div. 2)题解 "题目链接" A. Inscribed Figures 水题,但是坑了很多人。需要注意以下就是正方形、圆以及三角形的情况,它们在上面的顶点是重合的。 其余的参照样例判断一下就好了了。~~具体证明 阅读全文
posted @ 2019-05-16 15:59 heyuhhh 阅读(206) 评论(0) 推荐(0) 编辑