Processing math: 100%

10 2018 档案

该文被密码保护。
posted @ 2018-10-31 22:27 Patrickpwq 阅读(4) 评论(0) 推荐(0)
摘要:当覆盖两点的最小矩形不同时,一定不可达 这样的问题不难想到经典的二维树状数组+差分来支持二维区间覆盖+查询 对于覆盖操作 我们可以差分的给这个矩阵里加上一个编号 对于操墙操作 我们可以反着减去这个编号 对于查询 就查询这两个点的值是否相同 编号的累积不影响 因为只有在同一个墙内才会累积 注意 如果只 阅读全文
posted @ 2018-10-31 17:33 Patrickpwq 阅读(170) 评论(0) 推荐(0)
摘要:关键是那些两个数相乘拼成了立方数的 一个数分解质因数后,指数%3是不影响的 我们可以这样想——我们通过一个数,反推出能够和他凑成立方数的数 但有可能这个数在原序列里不存在 不过没关系 我们开两个桶 每次比较下大小 只往一边放 这样就不会多统计了 cpp include define N 100005 阅读全文
posted @ 2018-10-31 16:16 Patrickpwq 阅读(145) 评论(0) 推荐(0)
摘要:总的来说 从v通往1的道路 分为了步行和开车 也就是说 一个点u 他能作为分界点 当且仅当存在一条路径(u,v)的海拔全部高于当天水位线 且(u,1)是最短路 很显然 这是一个与瓶颈有关的问题 不难想到Kruskal重构树 由于瓶颈是海拔 所以我们先建出以海拔为关键字的重构树 由于是个小根堆 所以一 阅读全文
posted @ 2018-10-31 15:00 Patrickpwq 阅读(155) 评论(0) 推荐(0)
摘要:假设当前区间为[l,r] 中间点为mid 那么最近点对 要么在[1,l]中,要么在[l+1,r]中,要么两边各有一个 我们递归处理出左区间的 最近点对距离d1 右区间d2 取d=min(d1,d2) 然后有两个剪枝来处理情况3 1.按x为关键字排个序,枚举[l,r]的点,假如一个点的x与中间点的x差 阅读全文
posted @ 2018-10-30 22:41 Patrickpwq 阅读(104) 评论(0) 推荐(0)
摘要:暴力做法:(30pts) 把每条无向边拆成两条有向边.把每条边看成一个点,对于两条从一个点出去的边 建两条有向边 边权为较大值 这样是m^2的 优化: 可以用类似差分的思想来 然后出边之间做差分 对出边的边权排序 然后相邻边之间连边(小边向大边连权值为两边权值之差的边,大边向小边连权值为0的边) 这 阅读全文
posted @ 2018-10-30 20:55 Patrickpwq 阅读(148) 评论(0) 推荐(0)
摘要:%%%%%%%%%%%lst神仙 这是他的做法 吊了标算 对于这种有多少区间满足要求的 我们套路的用分治做 每次都统计左端点在左半边 右端点在右半边的个数 设f(i) 表示当前点到中间分割点的最大值,g(i)表示当前点到中间分割点的或和 我们发现 g(i)≥f(i) 所以只需找到g[i]=f[i]的 阅读全文
posted @ 2018-10-30 16:48 Patrickpwq 阅读(141) 评论(0) 推荐(0)
摘要:假设当前节点now的子树大小为size now的方案数是他的所有儿子内部如何分配的方案数相乘得到的 这个可以递归计算 不过对于那么多儿子之间 他们分配走的标号可能是不同的 比如now将把2,3,4,5分配给他的子树,那有可能是2,3;4,5 也有可能是2,4; 3,5这样分 所以还得套个组合数 C( 阅读全文
posted @ 2018-10-30 15:39 Patrickpwq 阅读(158) 评论(0) 推荐(0)
摘要:容易想到如果两个“交叉”的车车的宽度加起来比停车场还宽了那肯定是不合法的 也就是说 一个车子移动过程中只要前面存在一个位置,经过了他,而且和他的和大于w就是不合法的 然后我们从大到小枚举终点位置 这样保证了树状数组里维护的一定是经过了当前点的 阅读全文
posted @ 2018-10-29 17:07 Patrickpwq 阅读(171) 评论(0) 推荐(0)
摘要:都快忘了割点怎么搞了 对所有点分两类 1.根节点 2.非根节点 显然根节点是很好做的 只需要数一下有没有两个子树以上 对于非根节点 利用tarjan算法 回忆到dfn的定义:时间戳,即在dfs中第几个被访问到 low:经过最多一条后向边/栈中横叉边能到达的最小的节点时间戳 对于当前节点now来说,把 阅读全文
posted @ 2018-10-29 14:47 Patrickpwq 阅读(121) 评论(0) 推荐(0)
摘要:(谁告诉我是状压的????) 一行/列最多能放三个炮 30分是让你爆搜的 50分是让你状压的 假设有8列 dp[i][j]表示到第i行且前面列的状态为j (没有/有一个/有两个炮) 然后刷表 100分其实就是在50分的基础上修改了一点 因为发现 并不需要准确的知道之前摆放情况到底是什么样子的 于是d 阅读全文
posted @ 2018-10-29 14:36 Patrickpwq 阅读(148) 评论(0) 推荐(0)
摘要:一开始在往平均数那方面想 但是好像是错的 我们这样想 每当加入一个数 如果他与之前构成的是上升的就不管 如果是下降的 那肯定要折中 变成中间值才能最小 即答案就是最大的逆序对差值/2 cpp include define ll long long define N 5000000 using nam 阅读全文
posted @ 2018-10-29 10:42 Patrickpwq 阅读(129) 评论(0) 推荐(0)
摘要:(谁告诉我这是个分层最短路来着的???) 进入一个城市必须要这个城市所有结界都打破才能进 那我们可以边炸边走 也就是说 我们可以维护d1数组:走到的时间(结界可能没炸完) d2数组:可进入的时间(结界都被炸完了) d数组:真实的到达时间 容易发现d[i]=max(d1[i],d2[2]) 那我们就用 阅读全文
posted @ 2018-10-29 09:54 Patrickpwq 阅读(137) 评论(0) 推荐(0)
摘要:拿到这道题一开始有两个naive的想法 想法1:对于每个位置 向右扩展 直到不能取了为之 但是又觉得复杂度不对就放弃了...... 想法2:离散化坐标 二分仓库的位置 每次往左右两边数量较多的一边靠(这是什么口胡玩意儿???) 正解: 事实证明我是被ioi2011吓到了 其实就是想法1加了一丢丢东西 阅读全文
posted @ 2018-10-28 22:39 Patrickpwq 阅读(131) 评论(0) 推荐(1)
摘要:有一种显然错误的做法:每次从堆里取最大的,更新链表 比如 19,20,19 这样的话会先选20。但是很显然,选两个19带来的贡献可能是更好的 这时我们就要想一种能做到“反悔”的方法 其实只需要做一点点修改,每次再push一个“19+19 20”进去,一样是对的 那这个“19+19 20”的放在哪儿呢 阅读全文
posted @ 2018-10-28 17:07 Patrickpwq 阅读(124) 评论(0) 推荐(0)
摘要:~~这是一道毒瘤题。~~ 首先题目中给的是边权而不是点权,但是我们把边权移到点上就行了 但是要注意,之后我们修改u,v两点之间的路径时,就不要修改他们的lca,以及当要修改单边的时候,把边的编号 2(因为是双向边),然后挑深度大的那个点来修改 重点是区间覆盖tag和区间加tag。首先注意,进行区间覆 阅读全文
posted @ 2018-10-28 16:08 Patrickpwq 阅读(156) 评论(0) 推荐(0)
摘要:不难发现 题目中给出的f函数 其实就是一个数分解质因数后好素数和坏素数的个数之差 也就是说 数x带来的贡献 与x的质因数的种类有关系 又联想到gcd[1~x]一定是这个数的因子 也就是说一个数的贡献可以表示成:f(gcd[1~x])+f(....) 容易想到贪心做法:我们从后往前枚举 如果当前gcd 阅读全文
posted @ 2018-10-27 21:49 Patrickpwq 阅读(148) 评论(0) 推荐(0)
摘要:发现我还naive的不会Kruskal重构树 所谓Kruskal重构树 就是在做Kruskal的时候 构造一颗树 对两个即将合并的联通块 新建一个节点 作为这两个联通块的父亲 且这个节点的权值就是那条相连两个联通块的权值 而且这棵树很明显是一个堆 那么对于最初的最小生成树 两个节点路径上的最大/小值 阅读全文
posted @ 2018-10-26 17:44 Patrickpwq 阅读(120) 评论(0) 推荐(0)
摘要:vis是一个三维数组 vis[x][y][0]代表第一次搜到原图坐标(x,y)的x"虚"坐标,vis[x][y][1]代表第一次搜到原图坐标(x,y)的y"虚"坐标,vis[x][y][2]代表是否搜过 这样既可以判断什么时候进入了无限走状态,又可以判断是否死循环了(往前走一步又退回一步) 阅读全文
posted @ 2018-10-26 16:45 Patrickpwq 阅读(325) 评论(0) 推荐(0)
摘要:贪心策略:每加入一个数,如果之前已经存在它了,就直接交换 因此我们需要维护距离 就用树状数组好了 注意是2n cpp include define N 100005 using namespace std; int n,tree[N],pre[N],ans; inline int lowbit(in 阅读全文
posted @ 2018-10-25 22:15 Patrickpwq 阅读(241) 评论(0) 推荐(0)
摘要:对于这类棋盘问题 要关注的是这一行与前一行的关系 设dp[i][j][state]表示前i行,已经放了j个国王,状态为state的方案数 然后枚举i,枚举j,再枚举state,再枚举上一行last 先判断state,last各自是否合法,再判断他们俩合起来会不会冲突 最后答案就是最后一行所有状态的方 阅读全文
posted @ 2018-10-25 21:26 Patrickpwq 阅读(98) 评论(0) 推荐(0)
摘要:显然是不能直接开两个树状数组维护 前缀和,前缀和的前缀和。因为一旦对a[i]进行修改,将会影响许多位前缀和的前缀和 我们考虑对式子变一下形 Qi =S1+S2+S3+...+Si =a1+a1+a2+a1+a2+a3+...+ai =a1 i+a2 (i 1)+a3 (i 2)+...+ai =(a 阅读全文
posted @ 2018-10-25 15:57 Patrickpwq 阅读(115) 评论(0) 推荐(0)
摘要:据说这个叫分层图最短路 是个常见套路 一般就是:有k次机会可以直接通过一条边,问起点与终点之间的最短路径 我的理解:就相当给dis和inque数组加了一维表示用了j次免费机会 然后在松弛的时候就有两种决策:1.走免费边 2.走要钱的边 8102年了 别写spfa了 cpp include defin 阅读全文
posted @ 2018-10-25 14:45 Patrickpwq 阅读(89) 评论(0) 推荐(0)
摘要:好神奇的一道题 我们发现给白边加上权值后 跑MST后 选到的白边就越少 然后就二分这个加上的权值 不过边界好像有点恶心?不过没关系 思想最重要 cpp include define N 50005 define M 100005 using namespace std; struct Edge { 阅读全文
posted @ 2018-10-25 11:26 Patrickpwq 阅读(94) 评论(0) 推荐(0)
摘要:好题 一开始想状压 但是转移根本无从下手 设f[i][j]表示i~j天的最低成本 可以想到从第i天到第j天要么不换方案,要么从第k天换一种方案,类似于floyd求最短路 就是 f[i][j]=min(f[i][j],f[i][p]+f[p+1][j]+k) 这是个区间dp 然后我们发现 对于题目中有 阅读全文
posted @ 2018-10-25 09:39 Patrickpwq 阅读(86) 评论(0) 推荐(0)
摘要:显然最近的两个部落的距离是有单调性的 因此可以二分 考虑check 我们遍历所有点 先把 define N 1005 define eps 1e 6 using namespace std; template inline void read(T &x) { x=0; static char ch= 阅读全文
posted @ 2018-10-25 08:12 Patrickpwq 阅读(197) 评论(0) 推荐(1)
摘要:子序列肯定不可能是无限长的 由于amax=1e8 nmax=2e5 kmax=1e5 则summax=1e8 2e5 1e5=2e18 而longlong刚好能hold住 那也就是说一个子序列里面非1的个数不超过64个(longlong范围是2^64) 那我们可以把连续的1缩成一坨 然后枚举每个点 阅读全文
posted @ 2018-10-24 22:06 Patrickpwq 阅读(239) 评论(0) 推荐(0)
摘要:我们固定左端点 每当右边加入一个数 那么gcd肯定在原来的基础上丢掉某几个质因数 由于一个数最多有log个质因子 所以对于一个l gcd(l,r)不同的区间最多有log个 于是我们枚举左端点 二分寻找右端点 用线段树/st表查询一个区间里的gcd 再用哈希表更新 但是只能拿80分 区间是可合并的 用 阅读全文
posted @ 2018-10-24 17:43 Patrickpwq 阅读(115) 评论(0) 推荐(0)
摘要:我们发现直接做dp是不行的 有后效性 又发现T是满足单调性的 想到二分 考虑check 先来想想如何确定一个区间内的数经过修改能否满足limit 我们肯定是要把这个区间内的数两两的差改的尽量递增地平均才行 写出式子就是 (a[j] a[i])/(j 1) define INF 0x3f3f3f3f 阅读全文
posted @ 2018-10-24 16:37 Patrickpwq 阅读(121) 评论(0) 推荐(0)
摘要:容易想到贪心:吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序。 是可以证明无论怎么交换,都没有这样选优的。在这里由于我太菜了,就不写证明了 我们设dp[i][j]表示前i个人 在1号窗口打饭总时间为j 最早吃饭完的时间 那也就顺便可以推出在二号窗口的打饭总时间了 影响到当前dp[i][j 阅读全文
posted @ 2018-10-23 23:36 Patrickpwq 阅读(79) 评论(0) 推荐(0)
摘要:好题 同样的 我们考虑把环展开成链来想 我们引入一个概念:关键点 即 环外边的起点终点 对于u,v两点 u,v的最短路,必定是 环外边+环上连续一段...这样的几个组合拼成的 其次我们发现 “环上连续一段” 是很费时间的 极大地拖慢了我们spfa的效率 那么我们似乎只需要对于相邻两个关键点连一条权值 阅读全文
posted @ 2018-10-23 21:47 Patrickpwq 阅读(78) 评论(0) 推荐(0)
摘要:两个管道相交是啥情况? 有环展链 我们把环展成链过后 发现只会出现如下图两种情况 然后我们维护二维BIT1:表示左端点小于等于x 右端点小于等于y的个数 BIT2:左端点大于等于x 右端点小于等于y BIT3:左端点大于等于x 右端点大于等于y 查询就很简单了 对于操作1相当于一个更新 阅读全文
posted @ 2018-10-23 16:43 Patrickpwq 阅读(105) 评论(0) 推荐(0)
摘要:我日哦 完全忘了前几天才做的星球大战(JSOI2008 这道题还有花椒麻你 告诉你是一棵树 迷惑你是树上算法 正难即反 考虑离线存下点 用并查集维护 先把没有被破坏的点连起来 当两个联通块将要merge的时候 这时总贡献加了他们的权值和之积(根据乘法分配率可得 简直和星球大战一模一样 cpp inc 阅读全文
posted @ 2018-10-23 15:46 Patrickpwq 阅读(98) 评论(0) 推荐(0)
摘要:注意到x xor y 在二进制下1的个数是和x,y在二进制下1的个数有关 更具体的来说:一奇一偶是满足要求的 不加任何优化可以拿80分 O(nlogv) 我们又发现过程中会出现比较多的重复的数 因此可以记忆化一下 拿到90分 不过我们需要O(n)才能过 所以需要一个O(1)求x在二进制下的个数的方法 阅读全文
posted @ 2018-10-23 14:02 Patrickpwq 阅读(115) 评论(0) 推荐(0)
摘要:考虑到颜色只有50种 所以我们开50棵线段树 然后对于每次询问 循环50次对于每一个颜色的线段树询问 那如何查询啊 你考虑到每次询问的最左边都是1 也就是说只需要对于每种颜色的纵坐标 维护往右出现过的点的横坐标的最小值 然后就是区间(y1,y2)查询最小值 判断是否超过了x 但是会MLE啊 所以动态 阅读全文
posted @ 2018-10-22 22:47 Patrickpwq 阅读(110) 评论(0) 推荐(0)
摘要:首先我们知道一个数开7 8次方过后就歇逼了 那我们是否可以维护一个区间的flag标记 表示是否一个区间里的数都是一样的 那开根就到这儿就行了(似乎在口胡?) 然后我们看一组数据 2 3 2 3 2 3 然后整体加6然后开根号,又会变回2 3 2 3 2 3 相当于不会出现区间数字一样的情况了,这样就 阅读全文
posted @ 2018-10-22 21:03 Patrickpwq 阅读(110) 评论(0) 推荐(0)
摘要:首先应该看得出是一个背包吧 那dp数组的第一维肯定有前i个物品 那第二维放啥呢?血量?高度?时间? 时间是完全可以排除的,因为牛肯定是在辣鸡刚掉下的时候就使用它,而且对于subtask1"如果卡门可以爬出陷阱,输出一个整数表示最早什么时候可以爬出",答案肯定刚好是某个辣鸡下落的时间 血量呢?设dp[ 阅读全文
posted @ 2018-10-21 23:18 Patrickpwq 阅读(84) 评论(0) 推荐(0)
摘要:一开始直接搜索+剪枝,拿了50分,发现原来是搜索搜复杂了..因为搜索是可以过的 注意到题目中有一句''再回过头来关掉另一边的路灯,而事实并非如此,因为在关的过程中适当地调头有可能会更省一些",也就是说老王是在沿着某个方向走着走着突然转向,而不是毫无逻辑的,我之前写的搜索枚举就是毫无逻辑的 cpp f 阅读全文
posted @ 2018-10-21 16:24 Patrickpwq 阅读(75) 评论(0) 推荐(1)
摘要:一开始思路走偏 一直在想肯定与第几次取数有关 然后做了半天没做出来 看了题解才恍然大悟 原来有个性质“可以每行分开来做 最后加起来就好了” 那就变成了一个区间DP 我们设dp[i][j]表示从i到j闭区间的最大价值。(只考虑当前行) 那么dp[i][j]肯定是从i的右边/j的左边转移来的 则有dp[ 阅读全文
posted @ 2018-10-21 11:20 Patrickpwq 阅读(173) 评论(0) 推荐(1)
摘要:没错我搬家了 阅读全文
posted @ 2018-10-20 23:42 Patrickpwq 阅读(70) 评论(0) 推荐(0)
摘要:"传送门QWQ" dp[i][j][h][l] 表示在点 (i,j),差值为h,小A还是uim取液体的方案数(0:小A 1:uim) 转移方程: dp[i][j][h][1]+=(dp[i 1][j][(h a[i][j]+k)%k][0]) dp[i][j][h][1]+=(dp[i][j 1][ 阅读全文
posted @ 2018-10-19 21:40 Patrickpwq 阅读(75) 评论(0) 推荐(0)
摘要:对于不属于一个联通块的x,y,现在想要联通他们 则ans[y]=min(ans[x]+ans[y],max(edge[i].val,max(maxa[x],maxa[y])) min(minb[x],minb[y])); 前一种情况指他们俩各自占领各自的 后一种指一起占领 那么a[i]肯定取max, 阅读全文
posted @ 2018-10-19 17:06 Patrickpwq 阅读(271) 评论(0) 推荐(1)
摘要:对于左移加:其实就是解方程 由于i已确定 可以预处理出逆元 对于右移异或 可以直接模拟 因为前面一坨不会变 cpp include define uint unsigned int using namespace std; int main() { ios::sync_with_stdio(fals 阅读全文
posted @ 2018-10-19 16:16 Patrickpwq 阅读(124) 评论(0) 推荐(0)
摘要:考虑到当前能否选择这头牛 是与上次选哪头牛有关的 因为要满足差值大于k 所以记录一下last 表示选了哪一头牛 然后记忆化一下 有两个坑点 1.注意取绝对值 2.要枚举开头的那头牛 决不能直接dfs(0,0,0) 因为第一头牛与0的差值不一定大于k(或者初始化一下a[0]= INF也阔以) 这里提供 阅读全文
posted @ 2018-10-18 23:08 Patrickpwq 阅读(79) 评论(0) 推荐(0)
摘要:维护一个区间的包含最左的元素的LCIS,包含最右元素的LCIS,以及整个区间的LCIS, 然后pushup的时候就更新这三个值就行了。注意要考虑左右儿子可以“接”起来的情况等等 查询的时候要注意,也要考虑左右可以“接”起来时候,不过还要注意,有可能左右儿子边界的已经“越界了”,就是超过了查询范围,还 阅读全文
posted @ 2018-10-18 20:43 Patrickpwq 阅读(88) 评论(0) 推荐(0)
摘要:DFS策略:对于当前状态,枚举下一个选哪个(i),如果当前耗时已经超过i的死亡线,ans就累积 然后可以记忆化当前状态标记为true 之后扫到这儿就return 代码不是A的。。和几份题解都对拍了半天没找出问题 如果能指出错误的话请评论 cpp include define N 17 define 阅读全文
posted @ 2018-10-18 16:37 Patrickpwq 阅读(143) 评论(0) 推荐(0)
摘要:"传送门" 我们记录pos1 pos2 pos3 分别代表现在字符串1,2,3的位置 然后判断pos1是否等于pos3 或者pos2是否等于pos3 分别进行dfs 然后我们发现是可以记忆化的 比方当pos1=pos3且pos2=pos3 那会先搜索pos1+1 那么在这一次的dfs 有可能就 提前 阅读全文
posted @ 2018-10-18 14:45 Patrickpwq 阅读(149) 评论(0) 推荐(0)
摘要:我们直接在dfs的时候顺便建主席树 维护一个节点到根路径上的节点出现情况 对于查询(u,v) 用u点的主席树+v点的主席树 lca(u,v)的主席树 lca(u,v)父节点的主席树,在这样产生的主席树上查找第k小的排名,最后输出它原来的点权。 lca我选择了树链剖分 cpp include defi 阅读全文
posted @ 2018-10-18 14:03 Patrickpwq 阅读(111) 评论(0) 推荐(0)
摘要:先打一个最裸的暴力再优化 10分代码 cpp // luogu judger enable o2 include define N 105 using namespace std; int n,m,a[N][N],true_ans,choose[N]; //n束花 m个瓶子 vector q; vo 阅读全文
posted @ 2018-10-18 11:08 Patrickpwq 阅读(183) 评论(0) 推荐(0)
摘要:https://blog.csdn.net/linkfqy/article/details/72861176 阅读全文
posted @ 2018-10-18 10:01 Patrickpwq 阅读(94) 评论(0) 推荐(0)
摘要:解法1 玄学剪枝 最暴力的dfs是很好打的 交上去有70 考虑如何剪枝 1.当一个单词首尾和另外一个单词相同时,优先选择最长的那个,其他的不用选。 这一点很好实现,给原数组排个序,dfs的时候写个while特判一下就好 2.卡时自杀式剪枝 你懂我意思吧 以上两个剪枝随便加一个都可以过。。。 解法2 阅读全文
posted @ 2018-10-17 23:09 Patrickpwq 阅读(294) 评论(0) 推荐(0)
摘要:其实就是一张图 可知每个点出度为一 由于有环 所以把整个图缩点后会好做得多 在缩点后 每个强联通分量的出度至多为一。 然后我们dfs 直接搜很危险 考虑记忆化 设ans[i]代表第i个强连通分量的答案就好了 详见代码 cpp // luogu judger enable o2 include def 阅读全文
posted @ 2018-10-17 21:34 Patrickpwq 阅读(105) 评论(0) 推荐(0)
摘要:f[i][j]: i表示整个图走没走过的状态 j表示当前到了第j个点 存的值就是在这种情形下 可以走到的地方的状态 dp[i][j]:i表示整个图走没走过的状态 j表示当前在j点 访问剩余能去到的点的方案数 因此只需要跑一遍DFS就好了 cpp include define int long lon 阅读全文
posted @ 2018-10-17 17:53 Patrickpwq 阅读(264) 评论(0) 推荐(0)
摘要:期望是有线性性质的 考虑每个点的概率 由于一个点的子树放了后 它就不能再放了 换句话说 这个点是子树中第一个通电的 也就是说这个点的通电概率是1size[i] 题目中又说了每个点的编号大于儿子们 于是就不用dfs了 只需递推即可 把所有点的概率相加 那还要求出逆元 这里提供一种 阅读全文
posted @ 2018-10-17 16:13 Patrickpwq 阅读(99) 评论(0) 推荐(0)
摘要:用dp[i]来表示状态i下的最优方案,dis[j]表示j到根节点的距离(题目中所描述的K)用dfs来更新答案 cpp include include define INF 2139062143 define N 12 define M 1005 using namespace std; int g[ 阅读全文
posted @ 2018-10-17 13:07 Patrickpwq 阅读(66) 评论(0) 推荐(0)
摘要:对于询问[i,j] 在[1..n]中我们看看小于mid的数字有多少个,显然如果个数的两倍 define N 500005 using namespace std; int n,m,a[N],rt[N 100],lson[N 100],rson[N 100],tot,sum[N 100]; void 阅读全文
posted @ 2018-10-16 23:46 Patrickpwq 阅读(90) 评论(0) 推荐(0)
摘要:这是一道好题 可以更深的理解主席树 最初的想法是 一开始 一边加入任务 一边维护时间轴 换句话说 对于每个时间点 我们都想维护一颗权值线段树(这里的权值代表着优先级Pi)相当于对于一个任务 我们要维护Ei Si棵 然而显然MLE 考虑降维 联想到主席树建树方式是通过前缀和来的 既然是求前缀和 这道题 阅读全文
posted @ 2018-10-16 22:24 Patrickpwq 阅读(137) 评论(0) 推荐(0)
摘要:几个月没打了...全忘光 记得之前写过一篇主席树入门教程 https://blog.csdn.net/Patrickpwq/article/details/80315358 显然里面的代码丑的不能看 重发一个代码 主席树推荐不要写结构体 cpp // luogu judger enable o2 i 阅读全文
posted @ 2018-10-16 20:38 Patrickpwq 阅读(70) 评论(0) 推荐(0)
摘要:我们先考虑如何比较两两的字符串 我们可以用线段树来维护哈希值 在线段树上根据二分的性质来做即可 又考虑到 每颗线段树是在之前的某颗基础上只修改了一个节点 那显然就想到了主席树 另外说说如何pushup 我们考虑这样一个字符串 abcdefg 假设当前节点左儿子是abc 右儿子是defg 由于我们的哈 阅读全文
posted @ 2018-10-16 17:32 Patrickpwq 阅读(118) 评论(0) 推荐(0)
摘要:其实就是要求最小的环套树森林 我们现在只考虑如何合并 设当前边的两个端点是x,y 若x,y在一个联通块里 那这个联通块要么是树 要么是环套树 假如是个环套树 加一条边后必定变成两个环 不符合要求 假如是个树 加一条边就变成了换套树 符合要求 若x,y不在一个联通块里 假如同为环套树 加一条边后必定变 阅读全文
posted @ 2018-10-16 16:15 Patrickpwq 阅读(157) 评论(0) 推荐(0)
摘要:整理题意后 对于每个询问其实就是 由于C(m,n)=C(m,m n) 就变成了 其实就是在杨辉三角上的一列求其中的一段和 然后有个玄学的公式 什么意思呢 证明是很容易得到的 所以把阶乘预处理出来 由于1e9+7是质数 可以用费马小定理算逆元 就可以O(1)回答 cpp include define 阅读全文
posted @ 2018-10-16 15:26 Patrickpwq 阅读(113) 评论(0) 推荐(1)
摘要:思路:我们先判断这两条直线是否平行 若平行 再去判断是否重合 若不平行 算交点 具体实现:对于平行 我们直接判断v1,v2的叉积(v1,v2是来表示L1,L2的向量)是否为0 对于重合 我们把l1上的端点p1代入l2 判断叉积 如图 只需判断v1,v2的叉积是否为0 ,可以画个重合的图自行理解 对于 阅读全文
posted @ 2018-10-15 23:06 Patrickpwq 阅读(370) 评论(0) 推荐(0)
摘要:题目大意 : 给你一堆线段 问你是否存在这样一条直线 使得所有线段在直线上的投影均有公共部分 有输出Yes 没有输出No 性质1 只要我们找到一条直线能够穿过所有线段 那就是yes 这个可以感性理解 性质2 对于两条线段 我们可以枚举他们的端点穿成的不同的直线 判断是否穿过所有线段 与上面是等价的 阅读全文
posted @ 2018-10-15 21:08 Patrickpwq 阅读(178) 评论(0) 推荐(0)
摘要:传送门 设点a 假如a在一个板子1的左边 那他肯定也在一个板子2左边 而且板子还是按顺序排的 满足单调性 可以二分 考虑check 判断点a在直线L左边 只需判断a到直线L的端点1 端点2两个向量的叉积小不小于0 阅读全文
posted @ 2018-10-15 16:54 Patrickpwq 阅读(90) 评论(0) 推荐(0)
摘要:我们已经知道 两个向量的叉积就是他们所构成的平行四边形的面积 如果多边形是凸的 于是就可以从第一个顶点出发 把凸多边形分成n-2个三角形 通过叉积把面积加起来 其实多边形是凹的也适用 因为叉积算的是有向面积 一正一负便会抵消 阅读全文
posted @ 2018-10-15 15:29 Patrickpwq 阅读(156) 评论(0) 推荐(0)
摘要:很好的一道题 就是代码几百年都调不出来 首先可以想到树链剖分维护 其次怎么维护呢?我们可以魔改一下线段树 联想到线段树求最大子段和的做法 另外维护左右两个端点 合并的时候特判一下 这道题也是类似 我们维护左右端点的颜色 在合并左右儿子时候 如果左儿子的右端点=右儿子的左端点 那么当前节点的连续颜色数 阅读全文
posted @ 2018-10-15 11:16 Patrickpwq 阅读(93) 评论(0) 推荐(0)
摘要:我擦。。。有毒吧。。好久没调代码调过这么久了。。。 题目的难点就在于每个人打饭的顺序不是一定的 这点特别阻碍思想 注意到一个人的容忍度最多为7 联想到状压 考虑dp数组的定义 首先我们可以把一个人及其后面的7人打没打饭的状态压缩 其次肯定要记录当前到打饭到哪个人了(即1~i-1都打完了饭) 但是似乎 阅读全文
posted @ 2018-10-14 19:46 Patrickpwq 阅读(86) 评论(0) 推荐(0)
摘要:拿到题目首先想到:一个强连通分量里的点都可以互相走到 所以我们先缩点 缩完点后只需用spfa跑一遍最长路 最后再统计一下有哪些含有酒吧的强连通分量 取最大值 就是代码有点冗长 阅读全文
posted @ 2018-10-14 11:14 Patrickpwq 阅读(107) 评论(0) 推荐(0)
摘要:坐标SC tg 在ss考 上午在机房里做了会儿初赛题 感觉要爆零(flag 然后中午顶着寒风下楼买了个大鸡排吃 又回机房 本来想打题的 奈何突然紧张 又去看了看初赛知识点(事实证明毫无卵用 然后1.40了 和 @luositing @luositing 瞎逛找了一波人 然而啥都没有找到 中途遇到教练 阅读全文
posted @ 2018-10-14 09:52 Patrickpwq 阅读(107) 评论(0) 推荐(0)
摘要:传送门QWQ 由于一个环上点和边的个数是一样的 所以选了一条边后 点也就知道了 所以有判定函数 F(R)=∑Vi∗Xi−R∗∑Wj∗Xi 怎么判定F(R)的大小呢 按照道理 我们应该用V(u)−R∗W(u,v)来更新dis 有一个正环就可以减小r 但是spfa只能方便的判负环 所以取一下相反数即可 阅读全文
posted @ 2018-10-13 13:08 Patrickpwq 阅读(110) 评论(0) 推荐(0)
摘要:传送门here 这是一道01分数规划之最优比例生成树的入门题 类似的 我们对于每次check 预处理d数组(代码里是lowcost[])由于是稠密图 跑一遍prim 由于prim就是通过贪心,保证每次选的边最优来做的,所以只用统计最小生成树的权值有没有大于0 阅读全文
posted @ 2018-10-13 09:31 Patrickpwq 阅读(114) 评论(0) 推荐(0)
摘要:(小声bb:话说好像下周就可以停课了(flag)!终于可以去见学长们啦~ 虽然月考挂了) 在这里学习的分数规划——>传送门 简单总结一下 设函数f(r)=sigma(a[i]*x[i])-r*sigma(b[i]*x[i]) 变形 f(r)=sigma((a[i]-r*b[i])*x[i]) 假如r 阅读全文
posted @ 2018-10-11 23:08 Patrickpwq 阅读(144) 评论(0) 推荐(1)
摘要:(小声bb 我觉得带权并查集比较玄妙) 传送门QAQ 很容易想到用并查集来维护 设size表示当前队列的数量(以i为队头的数量),to_root表示当前节点到祖宗的距离 则对于每一个飞船,它到队头的距离,就等于它到它祖先的距离加上它祖先到队头的距离,而它的祖先到队头的距离,也可以变成类似的。可以在g 阅读全文
posted @ 2018-10-08 23:02 Patrickpwq 阅读(205) 评论(0) 推荐(0)
摘要:QWQ传送门 要在Splay中修改区间的话,可以先查找size值为l与r+2的两个节点,将一个旋转到根,另一个旋转到根的右儿子上,则要修改的区间就是根的右孩子的左子树 然后直接打翻转标记即可,翻转标记类似于线段树的懒标记,查第k大的时候pushdown,pushdown就是把左儿子,右儿子的位置交换 阅读全文
posted @ 2018-10-07 16:59 Patrickpwq 阅读(115) 评论(0) 推荐(0)
摘要:这是传送门 我的解法会被卡TLE 但是很有意义 子树查询+链上修改 对于链加,可以看作是一个点到根上的路径加。 一个修改 (x,W) 对 y 有贡献当且仅当 y 为 x 的祖先。且贡献为 (depx − depy + 1) ∗W。 拆开括号即为 depx ∗W+ (1 − depy) ∗W。(W是各 阅读全文
posted @ 2018-10-06 16:48 Patrickpwq 阅读(115) 评论(0) 推荐(0)
摘要:这是传送门 正难即反 我们先把所有安全的边先连起来, 然后倒序枚举每个攻击,对于一个攻击,并查集维护被攻击点与其他点的关系即可 阅读全文
posted @ 2018-10-06 11:22 Patrickpwq 阅读(213) 评论(0) 推荐(0)
摘要:【问题描述】 豪哥生活在一个 n 个点的树形城市里面,每一天都要走来走去。虽然走的是比较的 多,但是豪哥在这个城市里面的朋友并不是很多。 当某一天,猴哥给他展现了一下大佬风范之后,豪哥决定要获得一些交往机会来提升交 往能力。豪哥现在已经物色上了一条友,打算和它(豪哥并不让吃瓜群众知道性别)交 往。豪 阅读全文
posted @ 2018-10-05 23:37 Patrickpwq 阅读(211) 评论(0) 推荐(0)
摘要:描述 有n个正整数a[i],设它们乘积为p,你可以给p乘上一个正整数q,使p q刚好为正整数m的阶乘,求m的最小值。 输入 共两行。 第一行一个正整数n。 第二行n个正整数a[i]。 输出 共一行 一个正整数m。 样例输入 1 6 样例输出 3 提示 样例解释: 当p=6,q=1时,p q=3! 【 阅读全文
posted @ 2018-10-05 16:06 Patrickpwq 阅读(226) 评论(0) 推荐(0)
摘要:【描述】 L因为业务繁忙,经常会到处出差。因为他是航空公司的优质客户,于是某个航空 公司给了他一个优惠券。 他可以利用这个优惠券在任何一个国家内的任意城市间免费旅行,当他的路线跨国 才会产生费用。 L有一个航空公司的价格表与航线。而且每个城市出发都能到所有的城 市, 2 个城市间可能有不止一个航班, 阅读全文
posted @ 2018-10-04 22:01 Patrickpwq 阅读(147) 评论(0) 推荐(0)
摘要:【题意】 在成都某中学有 m 个男生与 n 个女生排队,这个学校的女生比较古怪,从某个位 置(包含这个位置)开始往前数,男生的数量超过了女生的数量,女生会感觉不安全,于 是会大叫起来,为了构建和谐校园,安排队伍时应该避免这样的情况。请你计算出不会引 发尖叫的排队方案的概率。(排队方案不同定义:当且仅 阅读全文
posted @ 2018-10-04 15:04 Patrickpwq 阅读(203) 评论(0) 推荐(0)
摘要:【描述】 有 N 行 M 列的矩阵, 每个格子中有一个数字,现在需要你将格子的数字分为 A,B 两部分 要求: 1、每个数字恰好属于两部分的其中一个部分 2、每个部分内部方块之间,可以上下左右相互到达,且每个内部方块之间可以相互到达, 且最多拐一次弯 如: AAAAA AAAAA AAAAA AAB 阅读全文
posted @ 2018-10-02 22:22 Patrickpwq 阅读(328) 评论(0) 推荐(0)
摘要:【描述】 在成都的一条街道上,一共有 N 户人家,每个家庭有 Xi 个人,他们和谐的生活在 一起,作为全国和谐街道,他们经常会小范围组织活动,每次活动会选择一户作为聚点, 并要求某些家庭参加,为了方便通知,村长每次邀请位置连续的家庭。因为每户人数不 同,每个家庭之间有一定距离,村长希望你计算出每次邀 阅读全文
posted @ 2018-10-02 17:03 Patrickpwq 阅读(165) 评论(0) 推荐(0)
摘要:恢复内容开始 【题目描述】 在 L 的书架上,有 N 本精彩绝伦的书籍,每本书价值不菲。 M 是一个书籍爱好者,他对 L 的书籍早就垂涎三尺。最后他忍受不了诱惑,觉得去偷 L 的 书,为了迅速完成这件事,同时他不希望 L 很快发现书籍少了,他决定偷书时,对于任意 连续的 k 本书,他最多选 B 本, 阅读全文
posted @ 2018-10-01 22:31 Patrickpwq 阅读(77) 评论(0) 推荐(0)
摘要:【题意】 L最近喜欢上了一个卡片游戏,游戏规则是: 2 个人一共拿 2n 张卡片,编号 1..2n,每个人 n 张,然后进行 n 轮出牌,每轮 2 个 人都打一张牌,,点数大的玩家每次获 1分。 L可以预测到对方要打牌的顺序。 同时,L有一次机会选择了某个时间点,从那个时候开始,每回合点数少者获胜。 阅读全文
posted @ 2018-10-01 15:25 Patrickpwq 阅读(144) 评论(1) 推荐(0)

点击右上角即可分享
微信分享提示