
SCOI
文章平均质量分 77
njlcazl
这个作者很懒,什么都没留下…
展开
-
【SCOI2010】【容斥原理】幸运数字
这道题首先需要注意的是数据范围,两个10^10规模的数相乘会爆long long,所以要尽量避免乘法。这道题很容易让人想到数位DP,不过这个想法是错误的,这就提示在考试中如果想到一种方法,但是却怎么也想不出来时不要盲目地陷入其中,而要冷静思考有没有其他的解决办法。这个解决办法就是利用容斥原理。先dfs出所有的“真正的”幸运数字,然后再利用容斥原理找出近似幸运数字。为了避免超时,需要原创 2013-02-21 22:09:11 · 878 阅读 · 0 评论 -
【SCOI2012】【二分法】【最大流】奇怪的游戏
这道题初看也许会感觉无法下手,由于每次操作都是相邻的两个,所以可以考虑将棋盘黑白染色,这样我们可以对黑色的格子和白色的格子单独考虑。设黑色格子个数为cnt1,总和为sum1,白色格子个数为cnt2,总和为sum2,最终所有格子都变成了x,则很容易写出下列的关系式: cnt1 * x - sum1 = cnt2 * x - sum2=> x * (cnt1 - c原创 2013-03-28 17:24:41 · 1109 阅读 · 0 评论 -
【SCOI2008】【数论】着色方案
看到这种方案数特别多的题目就想推公式。。。最朴素的可以想出15维的方程来递推,但其实C值不同的木板只有5种,而它们的本质都是相同的。这样我们可以设计一个6维的方程f[a][b][c][d][e][last]表示C值为1 ~5的油漆颜色总数,last表示上次选的油漆的C值方程的话就很直观了,使用记忆话搜索实现。代码:#include#includeusing namesp原创 2013-04-27 21:35:13 · 782 阅读 · 0 评论 -
【SCOI2007】【最小费用最大流】修车
需要一定思考才能建出模型的费用流。设有n辆车,m个维修人员每辆车看作一个点u,连边s -> u,容量为1,费用为0然后将每个维修人员拆成n个点,连边u-> v,容量为1,费用为k * time[u][v](k表示拆分的n个点中的第k个点),实际意义为第v个维修人员在倒数第k个位置修第u辆车最后对于所有与维修人员相关的点,连边v -> t,容量为1,费用为0做一次原创 2013-04-26 17:13:48 · 598 阅读 · 0 评论 -
【SCOI2007】【最大流】蜥蜴
非常直观的建图方法。对于有蜥蜴的格子,从源点向该点连一条容量为1的边,对于每个石柱拆点u,u'连边u-> u',容量为石柱高度对于任意两个可以到达的石柱u,v,连边u' -> v,容量为inf对于任意一个可以跳出边界的石柱,连边u' -> t,容量为inf做一次最大流即为最多能逃出的蜥蜴数量代码:#include#include#includeusing na原创 2013-04-26 16:58:31 · 781 阅读 · 0 评论 -
【SCOI2011】【数论】飞镖
很罕见的不好做的模拟题。情况很多,不容易考虑全面。可以先把问题简化,然后逐步加深,这样有利于思考问题。对这道题来说,可以先考虑不打红心的情况,再考虑打红心的情况。考虑打红心又分为打M,2M,3M,4M的情况,这样就不容易出错。做题一定要细心,考虑全面。代码:#include#includeusing namespace std;long long A1,B1,C1原创 2013-03-29 21:59:47 · 908 阅读 · 0 评论 -
【SCOI2010】【线段树】序列操作
做这道题之前就知道这题比较恶心,但是为了保持心态也没当作很难的题来做。维护的标记比较多一些:1、从左边开始的最多0的个数和1的个数2、从右边开始的最多0的个数和1的个数3、区间最大的0的个数和1的个数4、区间0的个数和1的个数5、是否反转6、覆盖标记有思路之后硬着头皮写,结果写下来一堆bug,改着比较烦,而且浪费时间。比赛也没有那么多时间改bug,所以平原创 2013-02-15 00:57:03 · 718 阅读 · 0 评论 -
【SCOI2012】【kruscal变形】滑雪与时间胶囊
看到这道题应该可以抽象出一个模型:在一个有向图上做最小生成树。关于这个问题,有个专业名词叫最小树形图,可以使用朱-刘算法解决,但复杂度为O(nm),对于本题来说无法接受。于是我们考虑无向图的最小生成树,为什么不能在有向图上做最小生成树呢?因为会出现不能覆盖到叶节点的情况,所以可以想到可以如果高度从高到低遍历的话,就可以求出最小树形图了。第一问可以使用tarjan或者bfs求出所有能访问到的原创 2013-03-28 11:18:35 · 765 阅读 · 0 评论 -
【SCOI2010】【三分法】传送带
很早就知道了这题可以三分,但当时我听到的说法是三分套三分,就退缩了- -。今天理解了一下某位神牛的代码,写的很巧妙,也挺好懂的。要注意需要判断三分出来的两个点是否重合,如果重合的话要选择左边一个点。代码:#include#include#includeusing namespace std;const double eps = 1e-12;struct Point{原创 2013-03-22 21:39:42 · 886 阅读 · 0 评论 -
【SCOI2010】【二分图最大匹配】游戏
这道题很明显的二分图模型,但是建图是关键。将一件武器的两个属性看作二分图左边的点,然后把这两个点与要攻击的点连两条边。这样原问题就转化为了在一个二分图上从小到大地找增广路,一旦未找到增广路,那此时的匹配数即位最大攻击的次数。代码(Ps:使用了bitsit)#include#include#include#includeusing namespace std;const原创 2013-02-25 20:08:29 · 793 阅读 · 0 评论 -
SCOI2009题解
总的来说,SCOI2009的数学味比较浓,而代码相对来说都比较短,注重思维过程。第一试:1、生日快乐看到题目感觉无法下手,但是由于题目的限制:面积必须相同且只能平行边界切,注意到n的范围非常小,所以直接枚举即可。#include#include#includeusing namespace std;const double inf = 1e100;const doub原创 2013-04-01 16:16:13 · 617 阅读 · 0 评论 -
【SCOI2010】【数论】【扩展欧几里徳】字符串
这是一道很有思维难度的题。首先将模型就行变换,假设一个人在一个矩形中,站在(0,0)这个点上,只能向右走或向上走,走到(n,m)这个点的方案数,就为所有生成字符串的方案数(可以想象成向右走就取了一个1,向上走就取了一个0)。得到总方案数以后,只要我们求出所有不合法的方案数即可。不难发现,所有不合法的方案一定穿过了y = x这条直线,所以我们做(0,0)关于y = x + 1的对称点(-1,原创 2013-03-24 16:46:26 · 1022 阅读 · 0 评论 -
【SCOI2011】【线段树】棘手的操作
比较好的一道数据结构题。初看题目很容易想到用并查集来维护森林中各个节点之间的关系,但是在合并的时候就会出现很多问题了。如果用并查集的话需要暴力地修改标记,维护最大值,然后需要堆来维护各个连通块的最优值,这样显得非常繁琐。于是我们可以考虑设计离线算法,先将所有询问读入,把连通块之间的关系用并查集维护,并且保证大的节点接在小的节点后面,维护完之后我们就可以将每个连通块映射成为一个区间,这样题目原创 2013-03-30 11:55:14 · 1235 阅读 · 0 评论 -
【SCOI2011】【差分约束系统】糖果
这道题应该是一道比较裸的差分约束系统。按照题意建图:1、如果A和B一样多-> 连边(A,B,0),(B,A,0)2、如果A小于B ->连边(A,B,1)3、如果A大于等于B ->连边(B,A,0)4、如果A大于B-> 连边(B,A,1)5、如果A小于等于B -> (A,B,0)其中第2种情况和第4种情况要特判,若a == b则无解。这样建好后用s原创 2013-03-29 17:48:45 · 1035 阅读 · 0 评论 -
【SCOI2010】【单调队列优化DP】股票交易
很明显的DP,不过省选主要考察的就是DP优化了。朴素的做法如下:状态:用f[i][j]表示前i天中,最后1天收盘时手中还持有j股的股票所能得到的最大收益。转移方程:f[i][j] = max{f[i - 1][j],f[i - W - 1][j - k1] - ap[i] * k1,f[i - W - 1][j + k2] + bp[i] * k2}。其中,k1 以上算原创 2013-02-25 20:15:08 · 1534 阅读 · 1 评论