
—————妙题—————
文章平均质量分 62
w4149
无
展开
-
duty (图论题.二维前缀和)
10.7图论题.二维前缀和的应用. 标算为:对于不包含环的图,连通块数目=点数-边数,所以利用二维前缀和进行预处理,O(1)求出矩形区域内的边数和点数. 很好写的70分算法:对每组询问都暴力求连通块数目的复杂度为O(NMQ),可以通过前7个测试点.出题人认为,在考场上,一个水平中等的选手最佳的策略是采用这个70分算法以留出时间思考第三题. 第3,4,5,6个测试点的其他做法:利用和标算同样的思原创 2017-10-09 14:32:26 · 389 阅读 · 0 评论 -
matrix (dp)
10.4思路: 神奇dp f[i][j]表示处理到前i列(保证前i列合法:被完全包含的区间中已经放了1,没有完全包含的区间中有j个不放(有j列在i的右侧放1)(且没有被完全包含的左区间中一定不放1) 对于所有的左区间,我们只在扫到它的l时处理(加个1进去),而对于右区间我们可以有选择的处理 #include<cstdio>#include<cstring>#include<algorith原创 2017-10-04 20:45:14 · 283 阅读 · 0 评论 -
big (Trie)
10.4思路: 每次操作相当于把前面几个数都在二进制意义下左移一位,然后与后面的所有数异或起来,再找x。 对手做的是将 x在二进制下左移一位,把超出二进制下n位的部分接到最后。而异或 i个数后左移等价于开始时先把前 i个数左移一位,再异或起来。 这是因为,这个运算只是二进制位上的位置变化,而对于按位异或时,二进制位置上的规律变化之后,不同数间的每个二进制位还是对的上的,而按位异或只要保证位置原创 2017-10-04 21:01:52 · 272 阅读 · 0 评论 -
Kor (数学题...)
kor10.19思路: 考虑维护cnt数组,cnt[i]表示是i的数有几个。 考虑维护从cnt1数组,cnt1[i]表示是i的二进制子集的数有几个。 显然cnt1可以从cnt转移过来,但是为了优化时间复杂度,我们选择把cnt和cnt1合并为一个数组用2^20*20的时间处理出来。 代码如下void sumup() { for(int i=0; i<P; i++) {原创 2017-10-19 22:08:25 · 395 阅读 · 0 评论 -
board (双联通分量)
board10.5 from idy观察性质 + 双联通分量 先观察到1个性质:只有当陆地数小于等于2时,才无法完成任务。 然后有1个性质:如果陆地数大于等于3,最多只需要删除2个位置,就可以让图变得不连通。(考虑坐标字典序最小的陆地,它的下边和左边一定没有陆地,删掉它右边和上边的它就不连通了,如果只有它和右边及上边,删掉它也不连通了)。 故,我们只需要判断是否可以只删除1个位置让其不连通,5原创 2017-10-05 16:47:04 · 336 阅读 · 0 评论 -
fill (贪心)
fill10.5思路: 题意是给你一些树上路径,问最少需要多少个树上的点,把所有路径覆盖掉 40分,序列上的问题是个经典问题,区间的最小点覆盖,按右端点排序后贪心即可。 考虑推到树上后怎么做,我们也是贪心,按照路径两个端点的lca的深度从大到小排序,然后贪心的选(即如果这个路径包含了被选择的点,跳过这条路径,否则选择这条路径的lca)。 证明:如果我们lca深度最大的那条路径上选择的点不是其原创 2017-10-05 16:53:17 · 313 阅读 · 0 评论 -
change 性质题
change思路: 结论是:如果B=1,10,100,1000并且A != 2B,那么答案是2,否则是1。二倍关系显然答案为1,下面解释1,10,100,1000的特殊性质: 举个例子,如果B= 10,A = 50,那么买了1之后,需要找零49,这个9肯定是由1,2,5凑出来的(能拼出49,一定能拼出9,然后剩下的部分即使有1,2,5,他们也一定能拼出10),减掉他们之后相当于用10,20,去原创 2017-10-05 16:49:36 · 275 阅读 · 0 评论 -
ccount 进制拆分(Lucas 数位dp)
ccount10.20思路: 对于一个C(n,m) 我们要求的就是它%5后是否为0。 这个nm太大了,我们没有办法直接计算,又发现这个模数P=5是个质数。 考虑Lucas,分解之后就会成为C(a1,b1) * C(a2,b2) * … * C(ai,bi)。 0 <= ai,bi <= 4 要让C(a1,b1) * C(a2,b2) * … * C(ai,bi) = 0 (mod 5),只原创 2017-10-20 19:21:10 · 767 阅读 · 0 评论 -
codeforces #547D Mike and Fish (二分图 欧拉回路)
Mike and Fish CodeForces - 547DAs everyone knows, bears love fish. But Mike is a strange bear; He hates fish! The even more strange thing about him is he has an infinite number of blue and red fish.He原创 2017-10-11 18:49:43 · 509 阅读 · 0 评论 -
BZOJ 1117 救火站Gas (贪心)
1117: [POI2009]救火站GasTime Limit: 10 Sec Memory Limit: 162 MB Description给你一棵树,现在要建立一些消防站,有以下要求: 1. 消防站要建立在节点上,每个节点可能建立不只一个消防站。 2. 每个节点应该被一个消防站管理,这个消防站不一定建立在该节点上。 3. 每个消防站可以管理至多s个节点。 4. 消防站只能管理距离(两点间最原创 2017-10-10 20:45:48 · 431 阅读 · 0 评论 -
BZOJ 2154 Crash的数字表格 (Mobius 分块)
2154: Crash的数字表格Time Limit: 20 Sec Memory Limit: 259 MB Description今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple)。对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数。例如,LCM(6, 8) = 24。回到家后,Crash还在想着课上学的东西,为了研究最小公原创 2017-10-11 09:53:25 · 262 阅读 · 0 评论 -
BZOJ 1703 Ranking the Cows 奶牛排名 (传递闭包)
1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名Time Limit: 5 Sec Memory Limit: 64 MB Description农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序. 约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他发现,他还需要再做一张原创 2017-10-10 21:57:37 · 480 阅读 · 0 评论 -
Birthday (背包dp)
10.901背包和完全背包的结合体,可以两个都跑一遍,但是相互关系要搞清楚。 我的做法是这样的, Dp[i][j][0/1]表示前i件商品花费了j的代价的代价时能得到的最多的糖果数,0表示这件商品还没有被买过,1表示这件商品已经买过.dp[i][j+w[i]][1]=max(dp[i][j][1]+a[i],dp[i][j+w[i]][1]); dp[i][j+w[i]][1]=max(dp[原创 2017-10-09 15:48:38 · 255 阅读 · 0 评论 -
crf 的军训 (二分图匹配)
crf 的军训1 Description crf 在拥有他的王国之前,还是一名中国人,在中国读完了大学。 众所周知,中国籍学生在中国读大学是要参加军训的,即使是crf 这样的天才也不能避免。 并且,众所周知,如果你运气不好上了一些军训很严的大学,你就会被要求做一些非常奇怪的事情。而crf 就是上了这样奇怪的大学。 军训的第一天,教官就检查了crf 的寝室内务。教官对于crf 的书架非常不满。原创 2017-09-10 19:29:19 · 464 阅读 · 1 评论 -
LA 4998 Simple Encryption (数论 dfs)
LA 4998 Simple Encryption题意: 输入正整数K1(K1≤50000),找一个12位正整数K2(不能含有前导零)使得K1^K2≡K2(mod10^12)。思路: 神奇的数论题,怎么也想不出来,膜膜大佬的方法。 K1^K2≡K2(mod10^12),同时意味着: K1^K2≡K2(mod10^i),i ≤12 现在我们用(abcd)表示一个四位数,用(bcd)表示它的后原创 2017-08-31 17:34:37 · 420 阅读 · 1 评论 -
CodeForces 438D 线段树区间取模
CodeForces 438Ddescription:长度为n的非负整数数列,3种操作 1. 求[L,R]所有数的和。 2. 将[L,R]中所有数都mod x。 3. 将a[i]修改为v。 n,m≤100000input第一行两个整数n,m,表示数列元素个数和操作数 接下来n个数,表示序列 接下来m行,每行开头一个整数表示操作output对于每一个询问操作,输出一个整数表示答案思路:原创 2017-10-02 16:53:31 · 1356 阅读 · 0 评论 -
number (二分答案)
number:10.1思路: 令 S(i)={i+1,2,…,2i},f(i,k)表示 S(i) 中二进制下恰好有k个1的数的个数(i>0 ,k>=0 )。 f(i,k)=ΣC(ax+1,k−x+1)−C(ax,k−x+1) x=1~min(k,p),其中 p表示 i在二进制下1的个数, ax 表示i在二进制下第x高的1所在位代表的 2的幂次 不难证明 f(i,k)<=f(i+1,k); (原创 2017-10-02 17:10:52 · 215 阅读 · 0 评论 -
water 灌水问题(最小生成树 搜索)
10.3water思路: 一个块的高度就是从这走出矩形所有路径上最大值的最小。相邻块连边,边权为两块的较大值,矩形边界的块(人工加一圈为0的圈)向“矩形外”连(把“矩形外”抽象成一个S点),权值为 max(高度, 0) ,做最小生成树。 这样就能找到最优解,那么怎么统计答案呢?从S开始dfs记录到每个点的路径最大值。 时间复杂度 O(nmlognm)贴一份 berrykanry的代码#inc原创 2017-10-03 20:38:50 · 475 阅读 · 0 评论 -
BZOJ 3210 花神的浇花集会 (切比雪夫 曼哈顿)
3210: 花神的浇花集会Description 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动。 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花集会的题,必须找一道尽量适合所有人的题 现在花神知道每个人的代码能力x和算法能力y,一道题(代码难度X算法难度Y)对这个人的不适合度为 Max原创 2017-10-27 11:33:39 · 328 阅读 · 0 评论 -
Hotal (巧妙地dp设计)
10.10思路: 很明显能看出是dp,但是如果把dp函数定义成前i个房间有j的人就很难处理,这道题有种很好的解法是想象相邻房间都添加一个通道,然后将dp函数定义成通道经过的人的个数,知道前一个通道经过的人数和当前房屋的人数,就可以根据处理后房屋人数为0 4 7三种状态来更新之后的一条通道经过的人数以及代价。#include <iostream>#include <cstdio>#include原创 2017-10-10 20:52:47 · 751 阅读 · 0 评论 -
兔子 (dp)
兔子(rabbit)10.26第1,2个测试点: O(n!). STL中的next_permutation()就可以得到这20分 第3,4个测试点: O(n!)打表,O(1)回答. STL中的next_permutation()跑个几分钟就出来了 第5,6,7个测试点: O(2n*n2)状压DP,f[S][i][0/1]表示已经使用了数字集合S中的数字,最后一个数字是i,最后一个数字比倒数原创 2017-10-29 18:12:38 · 337 阅读 · 0 评论 -
蚊子 (树形期望dp)
蚊子(mosquito)10.26首先每只蚊子的贡献是独立的.如果一只蚊子经过了k个会被灭蚊器影响的点那么这个蚊子对答案的贡献是1-(1-p/q)k. 用1遍bfs求出哪些点是被灭蚊器影响的点.然后进行不同的处理. n为树的点数,m为叶子节点数. 算法1: 对于每一只蚊子,做一遍bfs,O(m2)次bfs,复杂度O(nm2),期望得分10分 算法2: 通过一次bfs我们可以统计出一个叶子原创 2017-10-29 18:17:59 · 570 阅读 · 0 评论 -
BZOJ 2125 最短路 (拆环重建图 lca spfa)
2125: 最短路Time Limit: 1 Sec Memory Limit: 259 MBDescription给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径。Input输入的第一行包含三个整数,分别表示N和M和Q 下接M行,每行三个整数v,u,w表示一条无向边v-u,长度为w 最后Q行,每行两个整数v,u表示一组询问Output输出Q行,每行原创 2017-10-31 17:03:52 · 423 阅读 · 0 评论 -
fly(树状数组)
10.7算法1: 直接按照题目描述计算鬼畜值.容易发现,虽然第一象限内有无数个点,但只被一条线段经过的点的鬼畜值一定是0,所以我们只考虑至少被两条线段经过的点,这样的点最多有n^2个,去去重就可以按照定义算鬼畜值了.复杂度至少为O(n^2),视后续的处理方式时间复杂度可能更高. 可以得到n<=100时的20分. 算法2: 仔细观察题目中鬼畜值的计算公式,发现实际上是C(x,2),即每一对在这原创 2017-10-09 15:09:05 · 247 阅读 · 0 评论 -
BZOJ 4197 寿司晚宴 (状压dp)
4197: [Noi2015]寿司晚宴Time Limit: 10 Sec Memory Limit: 512 MB Description为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴。小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴。 在晚宴上,主办方为大家提供了 n−1 种不同的寿司,编号 1,2,3,…,n−1,其中第 i 种寿司的美味度为 i+1 (原创 2017-10-18 10:04:04 · 371 阅读 · 0 评论 -
有向图限制性割点 (概率 或 tarjan)
i10.14思路: 先缩一遍强连通,如果一个点所属的强连通分量大小不是1或者有自环则不行,否则将所有1号点能到达的边与能到达n号点的边抽出来建一个新图,考察每个点是不是割顶即可。(后一步也可以按照拓扑序从小到大,存一个“当前访问过的点延伸出的最远的边”,如果之前所有最远的边都没有超过当前点,则这个点是一个答案。 还有一种方法就是算概率,通过递推转移得到所有点到达的概率,然后判原创 2017-10-15 21:45:15 · 420 阅读 · 0 评论 -
work 工作 (dp)
【work题解】思路: dp(i,j,k)考虑了前i件事,同时距离i最近的j件事的状态,k表示最近的做的事距离i的距离。 每次决策只有两种,先取出之间没做的某件事v做了,即 dp[i][j | (1 << v)][v] = min(dp[i][j | (1 << v)][v], dp[i][j][k] + ( (k == 19) ? a[i - v] : calc(a[i - v] , a[i原创 2017-10-16 20:19:30 · 305 阅读 · 0 评论 -
星空 (状压dp)
星空10.24思路: 链接#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#define INF 0x3f3f3f3f#define N 40010#define P 18using namespace std;int n, k, m, cnt = 0原创 2017-10-24 21:30:50 · 437 阅读 · 0 评论 -
基因的庇护 (AC自动机 dp)
基因的庇护10.25思路: 一道比较典型的AC自动机上DP,只不过需要分析一下性质。 由于每个位置都需要被庇护序列覆盖到,用dp[i][j][k]表示链长为i,在AC自动机上的j号点,当前链上倒数第k个位置是最左的没有被覆盖到的位置时的方案数。预处理出AC自动机上每个结点表示的串的最长的有庇护效应的后缀长度,转移时就看这个长度是否大于等于k+1,若大于等于则说明倒数第k个位置能被覆盖到了,即转移原创 2017-10-25 20:40:36 · 263 阅读 · 0 评论 -
Tree (树上期望dp)
Tree11.2 和 11.311.2考虑1个随机过程,第1次走到u号点的时间可以分成两部分,第1部分是从1号点随机游走第1次走到u的父亲p的时间,第2部分是从p开始走,第1次走到u的时间,由期望的线性性,第1次走到u的时间期望等于这两部分期望的和。第1部分是一个子问题,我们考虑怎么解决第2部分,我们把这个问题变成1棵树(并且根节点脑袋上也有1条边),从根节点开始随机游走,走出这棵树期望的时间,我们原创 2017-11-03 16:32:10 · 1156 阅读 · 0 评论 -
BZOJ 4565 字符合并 (区间状压dp)
4565: [Haoi2016]字符合并Time Limit: 20 Sec Memory Limit: 256 MB Description有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数。得到的新字 符和分数由这 k 个字符确定。你需要求出你能获得的最大分数。Input第一行两个整数n,k。接下来一行长度为n的01串,表示初始串。接下来2k原创 2017-10-31 21:43:23 · 416 阅读 · 0 评论 -
BZOJ 2321 星器 能量守恒定律
2321: [BeiJing2011集训]星器Time Limit: 1 Sec Memory Limit: 128 MB DescriptionMagic Land上的时间又过了若干世纪…… 现在,人们谈论着一个传说:从前,他们的祖先来到了一个位于东方的岛屿,那里简直就是另外一个世界。善于分析与构造的Magic Land上的人们总是不明白那里的人们是如何不借助精确的实验与计算驱动和操纵魔法。原创 2017-10-13 14:53:21 · 300 阅读 · 0 评论 -
回家 (无向图割点)
思路: 一是要是割点,而是要分开1和n。 我们通过判断一个割点的儿子能不能到达n,因为割点的儿子跟1是不相连的(从1开始的dfs)#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <stack>#define LL long long#define N 200010#原创 2017-10-29 18:27:03 · 327 阅读 · 0 评论 -
混合调酒 (模型转换最短路)
混合调酒思路: 假设共用了m杯酒,酒精含量分别为b1,b2…bm b1+…+bm=m*n b1+…+bm=n+n+…+n(m个) (b1-n)+(b2-n)+…+(bm-n)=0 即:将所有的酒精含量减去n后,寻找最少的数字使他们的和为0 我们把数字和(-1000到1000)当作节点,可以使用的酒精含量当作边(边权为1),跑从0到0的最短路(也就是bfs)即可。注意显然存在一条任何时候数原创 2017-10-12 21:52:12 · 316 阅读 · 0 评论 -
曼哈顿距离几何意义 矩形面积并
11.7思路: 二分ans,把所有长度>mid的(lf,rg)都搞出来, 然后我们要找出一个点对(u,v),使得|x - u| + |y - v| <= mid。 考虑几何意义,曼哈顿距离的图像限定。 把一个区间(lf,rg)转换成一个点(x,y)。 对于每个点(x,y),我们构建出一个以(x,y)为几何中心, 对角线长2*mid,且对角线平行于坐标轴的正方形。 满足条件的(u,v)就原创 2017-11-07 17:39:56 · 2798 阅读 · 0 评论 -
升序操作 (二分 贪心)
也可以不用判环,暴力check,按照顺序暴力跑(看代码吧)#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define LL long long#define N 400010using namespace std;int n, cnt;int a[N], b[N];inline in原创 2017-11-07 17:29:19 · 466 阅读 · 0 评论 -
车站分级 (线段树优化建边 拓扑序最长路)
车站分级(加强版)10.11思路: 基本方法就是等级高的车站向等级低的车站连边,最后跑拓扑序的最长路就是ans。 线段树优化建边的拓扑排序(线段树的神奇应用)。 先是建虚点优化,边数优化为2*n,但是发现建边的复杂度是nm,考虑线段树优化。 注意到经停站把车站序列划分成了多个区间,每个区间对应O(log)个线段树上的节点,因此连边时可以把边数由O(nm)优化到O(m*log(n))。原创 2017-10-13 08:24:23 · 496 阅读 · 0 评论 -
对空防御的训练 改编自BZOJ3165 (线段树永久化标记 李超线段树)
对空防御的训练256MB / 1s ; defense.cpp / c / pas / in / out【题目描述】 秋月十分擅长对空作战。尽管如此,必要的训练也不能懈怠。 在一次训练中,会有m个事件发生。 1. 出现一架飞机在(x1,y1)到(x2,y2)的线段上出现并来回飞行。 2. 秋月接到指令,要在x坐标为a处击坠一架飞行路线经过该位置的飞机。 为了确保击坠的可能性最大,秋月将选择原创 2017-09-28 20:53:10 · 455 阅读 · 0 评论 -
BZOJ 2744 朋友圈 (最大团)
2744: [HEOI2012]朋友圈Time Limit: 30 Sec Memory Limit: 128 MB Description在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着。一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目。 两个国家看成是AB两国,现在是两个国家的描述: 1.原创 2017-10-30 21:29:38 · 560 阅读 · 0 评论 -
POJ 1275 Cashier Employment (差分约束 二分)
Cashier Employment POJ - 1275题意:德黑兰的一家每天24小时营业的超市,需要一批出纳员来满足它的需求。超市经理雇佣你来帮他解决一个问题————超市在每天的不同时段需要不同数目的出纳员(例如,午夜只需一小批,而下午则需要很多)来为顾客提供优质服务,他希望雇佣最少数目的纳员。超市经历已经提供一天里每一小时需要出纳员的最少数量————R(0),R(1),…,R(23)。R(0)原创 2017-10-13 12:15:05 · 329 阅读 · 0 评论