蒟蒻总结-2019.3.24

草草写完的,写的不太好,望谅解

移动"哨兵棋子"

题面+数据规模

一条数轴有\(N\)个棋子,每个棋子可以占据一个整数位置。\(N\)个棋子目前位于不同的整数位置,现在你想要移动它们以便它们占据N个连续位置(例如,位置\(5,6,7,8\))。当前所有棋子中位置最小或者位置最大的棋子,称为“哨兵棋子”。每一次,你只能移动“哨兵棋子”。你可以把“哨兵棋子”移动到当前任何未占用的整数位置,前提是在这个新位置该棋子不再是一个“哨兵棋子”。请确定使得\(N\)个棋子最终占据连续的\(N\)个位置的最小移动次数和最大移动次数。

棋子的数量:3 <= N <= 100000
棋子的位置ai:[1,1000000000]

题解

根据题意,我们可以发现,每一次的移动都会使最远的两个棋子的距离变小,如果要让移动步数尽可能多,那么要让距离缩小的速度变小,这就说明只要有间隔,就尽可能都走一遍。
看看下面这个例图:

...O..O.O...O...OO.....O..

我们走第一步,我们要让空缺尽可能多,那么我们移动左边的棋子,变成了这个样子:

......OOO...O...OO.....O..
   ----I

接下来,我们要把所有可以走的空缺都走,幸运的是,剩下的空缺其实都是可以走到的。
移动的方法是“滚”,每一步都把最左边的一个棋子移到离它最近的空格处。

那么最大值可以用下边的方法求出:

\(\sum\limits_{i=2}^n (a_i-a_{i-1}) - \min\{a_2-a_1,a_n-a_{n-1}\}\)

接下来解决最小值,由于移动完成后的样子应该是类似这个样子的:

.....OOOOOOO....
由连续n个棋子组成的

那么我们可以枚举完成后的n各个位置的起始点。比如我们把它放在这个位置:

......OOO...O...OO.....O..
       [     ]

这个区间里面有三个点,剩下四个点要填,我们脑子稍微转一转,我们得到下面的移动方法:

......OOO...O...OO.....O..
      -------I
.......OO...OO..OO.....O..
           I------------
.......OO..OOO..OO........
          I-------
.......OO.OOOO..O.........
         I-------
.......OOOOOOO............

这个的确是移动步数最小的方法,仔细观察,可以发现,只要我们把要到达的区间的两端都各使用一步(如果已经被填上就不需要了),剩下的就一步一个空,总共就需要\(n-sum(l,r)\)步,\(sum(l,r)\)表示本身已经在区间\([l,r]\)中的棋子个数。显然最小移动步数就是所有中最小的\(n-sum(l,r)\)。

在实现的时候,我们可以枚举区间的左端点,用二分找到sum值,或者枚举区间的右端点,然后使用单调队列得到在这个区间中最左边的棋子的位置。
但问题是,位置的枚举可能会超时,但是我们可以发现,很多的\(sum(l,r)\)值其实是一样的,从左到右扫过去,如果两个相邻的\(sum(l,r)\)相等,就说明没有失去任何棋子,或者没有加入任何棋子。那么我们可以只枚举每个棋子的位置作为左端点(或者右端点),这样既不会考虑少可能的情况,效率也快了不少。

树与图

题面+数据规模

最近有人发明了一款新游戏。给定具有N个顶点的连通无向图和具有N个节点的树,尝试以下列方式将该树放置在图上:

  1. 树的每个节点与图的顶点对应。即每个节点对应一个顶点,每个顶点对应一个节点。
  2. 如果树的两个节点之间存在边,则图中的相应顶点之间也必须存在边。

现在想知道有多少不同的放置方案,答案模1000000007

1<=n<=14

题解

idea 1

我们先给这棵树强制地弄一个根\(root=1\)。
考虑树形dp,我们用\(f(u,mu, S)\)表示树中的点\(u\),映射到图中的点\(mu\),映射子树\(T_u\)所使用的集合为\(S\),且合法的方案数。
我们用\(G(u, v)\)表示途中点u和点v中是否存在边。那么:

\(f(u,mu, S)=\prod\limits_{v\in son_u} \sum\limits_{G(mu,mv)} \sum\limits_{S'\subset S} f(v,mv,S)\)

那么最终答案就是\(\sum\limits_{mu=1}^n f(u,i,\{1\ to\ n\})\)

时间复杂度极高,不过好在LGJ仁慈,凭信仰可过。

idea 2

我们使用容斥原理,首先枚举一个图中的集合\(V\),我们要将所有的树上节点都映射到这个集合中,可以将多个树上节点映射到一个图上节点中,只要这个树上节点映射的点和该节点的父节点映射的节点有一条边就好了。
显然,对于\(n-|S|\)为偶数的情况,我们要加入总答案,否则减去。

接着,我们需要求出每一个集合对应的方案数:
用\(f(u,mu)\)表示点\(u\)映射到\(mu(mu\in V)\)的\(T_u\)的映射方案。显然得到:
\(f(u,mu) = \prod\limits_{v\in son_u}\sum\limits_{mv\in V,G(mu,mv)} f(v,mv)\)

那么一个集合\(V\)的方案数是\(\sum\limits_{mu\in V} f(1,mu)\)

原文地址:https://www.cnblogs.com/juruohjr/p/10660629.html

时间: 2024-08-30 14:31:16

蒟蒻总结-2019.3.24的相关文章

【BZOJ】4636: 蒟蒻的数列

4636: 蒟蒻的数列 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 145  Solved: 71[Submit][Status][Discuss] Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一行

bzoj4916 神犇和蒟蒻

Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你输出一个整数A=\sum_{i=1}^N{\mu (i^2)}; 请你输出一个整数B=\sum_{i=1}^N{\varphi (i^2)}; Sample Input 1 Sample Output 1 1 正解:杜教筛. 第一问答案是$1$. 第二问,先给个结论:$\varphi (n^{2})=n\va

noip2013Day2T3-华容道【一个蒟蒻的详细题解】

描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的: 在一个 n*m 棋盘上有 n*m 个格子,其中有且只有一个格子是空白的,其余 n*m-1个格子上每个格子上有一个棋子,每个棋子的大小都是 1*1 的: 有些棋子是固定的,有些棋子则是可以移动的: 任何与空白的格子相邻(有公共的边)的格子上的棋子都可以移动到空白

记一个蒟蒻的绝望

感觉现在…… 怎么讲,心挺冷的. 今天一月五号了.距离省选,时间好短啊. 我还有那么多东西不懂.甚至听都没听说过. 等到真正去省选的时候,我可能跟现在一样,什么都不会. 我的名字能不能被看到都不知道.哈,还进队呢. …… 我NOIP似乎考的很好.然而首先我只有24名,其次我实力到不了420. 我D2T2打的是状压贪心.rqy和gc回来的路上告诉我,我那个DP,显而易见是没有考虑周全的. 所以我实力大概是320分.320分,能做得了什么? …… zht说自己现在省选没可能的.四月差不多可以. 我四

蒟蒻ACMer回忆录 &#183; 一段弱校ACM的奋斗史

三年半的ACM生涯终于迎来了终点,退役之时,感慨万分,故写此文以纪念逝去的时光,那些为ACM拼搏的日子,那段弱校ACM的奋斗史. 三年半的ACM生涯,窝见证了CUMT从打铁到铜牌的突破,又见证了从铜牌到银牌的突破:见证了集训队员从3人发展到10余人,又见证了ACM实验室的落实. 三年半的ACM生涯,窝经历了太多,有Accepted时的欢笑,有Wrong Answer时的沮丧,有Time Limit Exceeded时的无奈,有Runtime Error时的尴尬,有打铁的失落,有拿牌的惊喜. 13

算法描述》LCA两三事(蒟蒻向)

LCA是图论中常用的解决树形结构子问题的工具,这一问题一般需要用一个简短的子函数直接解决,但是这对于广大蒟蒻们仍然是一个不小的问题. LCA是指在树形结构中两点的最近公共祖先,对于这个问题,直接向上找事最直接的方法,但同时时间复杂度和数据给出的生成树的层数有关,最优情况是logN级别的,但是如果数据给出的是一条链就GG了,所以要用更优的方法写,一般来说,用的是log2N的操作,最糟糕的复杂度也是logN级别的,那如何实现这一过程捏,我这里有两种方法,和大家分享 第一种:树上倍增 具体方法是对于已

bzoj 4636: 蒟蒻的数列

4636: 蒟蒻的数列 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一行一个整数N,然后有N行,每行三个正整数a.b.k. N<=40000 , a.b.k<=10^9 Output 一个数,数列中所有元素的和 Sample Input 4 2 5

蒟蒻的第一篇博文

先刷一波存在感... 据说维护Blog可以作为积累然后就决定开一波Blog=.= 本来想用Hexo Framework加上GitHub Pages做一个Blog来着(因为GitHub比较Geek嘛) 然后折腾了半天搞了个NexT Theme感觉异常地漂亮 然后Commit上了GitHub还写了几篇测试文章自我感觉良好 然后调整了一发文件夹结构因为我总是要移动工作区 然后折腾了一段时间感觉这个Blog估计可以使了 然后... 然后突然发现Hexo Framework构造的是一大坨静态页面没法加载数

BZOJ3786 星系探索 蒟蒻出题人给跪

本蒟蒻闲得蛋疼于是在BZOJ上加了一道水题,果然被瞬间水过... 只能说本蒟蒻实在是太弱了. Q:你为什么要写这篇博客? A:我只是为了水经验233.... 正常向的数据.题解.标程请自行传送下面的云盘... http://pan.baidu.com/s/1qWsMHM8 吐槽: 为什么本地不开O2 10s在OJ上开O2 还需要20+s啊!!!我本来不想卡常数好不好. 因为这个原因用数组实现数据结构被卡的请见谅...现在是40s应该卡不掉了. 另外如果发现自己被卡掉请重交一次.原因不解释. 为什