【IOI 2011】Race】的更多相关文章

[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2599 [算法] 点分治 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 200010 #define MAXK 1000010 typedef long long ll; const ll INF = 2e9; ll i,n,k,u,v,w,tot,root,len,ans; ll head[MAXN]…
裸的点分治,然而我因为循环赋值$s$时把$i <= k$写成$i <= n$了,WA了好长时间 #include<cstdio> #include<cstring> #include<algorithm> #define N 200100 #define inf 2147483647 #define max(a,b) (a)>(b)?(a):(b) #define min(a,b) (a)<(b)?(a):(b) #define read(x)…
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/46828379"); } 题解: 裸最小乘积生成树. 最小乘积生成树定义: 有一张n个点m条边的无向图,每条边有k个权值. 如今要取一个边集M使得其将全部点连通.并使 ∏ki=1(∑j∈Mjcost(j,vali))…
2241: [SDOI2011]打地鼠 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 877 Solved: 557 Description 打地鼠是这种一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来非常短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部.砸到的地鼠越多分数也就越高. 游戏中的锤子每次仅仅能打一仅仅地鼠,假设多仅仅地鼠同一时候探出头.玩家仅仅能通过多次挥舞锤子的方式打掉全部的地鼠. 你觉得这锤子太没用了,所以…
[题目链接] 点击打开链接 [算法] 树链剖分 [代码] 本题,笔者求最近公共祖先并没有用树链剖分“往上跳”的方式,而是用倍增法.笔者认为这样比较好写,代码可读性 比较高 此外,笔者的线段树并没有用懒惰标记,只要当前访问节点的线段总数为1,那么就下传 #include<bits/stdc++.h> using namespace std; #define MAXLOG 18 ; int i,n,m,timer,x,y,c,t; int dep[MAXN],fa[MAXN],size[MAXN]…
[题目链接] 点击打开链接 [算法] 线段树扫描线求周长并 [代码] #include <algorithm> #include <bitset> #include <cctype> #include <cerrno> #include <clocale> #include <cmath> #include <complex> #include <cstdio> #include <cstdlib>…
[题目链接] 点击打开链接 [算法] 本题用map很好写,笔者用的是哈希的写法 [代码] #include<bits/stdc++.h> using namespace std; #define MOD 10007 #define MAXN 50010 int T,n,len,i,x; int a[MAXN]; vector<int> e[MOD]; inline void Clear() { int i; ; i < MOD; i++) e[i].clear(); } in…
[题目链接] 点击打开链接 [算法] 对于第一问,将这个图缩点,输出出度为零的点的个数 对于第二问,同样将这个图缩点,输出入度为零.出度为零的点的个数的最大值 [代码] #include <algorithm> #include <bitset> #include <cctype> #include <cerrno> #include <clocale> #include <cmath> #include <complex>…
[题目链接] 点击打开链接 [算法] SPFA + SLF / LLL 优化 [代码] #include<bits/stdc++.h> using namespace std; #define MAXT 25000 int i,T,R,P,S,u,v,w; ],vis[MAXT+]; vector<pair<]; template <typename T> void read(T &x) { ; ; ; } +c-'; x*=f; } inline void S…
[题目链接] 点击打开链接 [算法] 考虑求每个人可以不分的方案 那么,对于每件物品,我们把它分成n份,每一份对应分给每一个人,有C(a[i]+n-1,m-1)种方案,而总方案数就是每种 物品方案数的乘积 然后,根据容斥原理,ans = 至少0人没分到特产 - 至少1人没分到特产 +  ... - C(m,m) * 没有一人分到 特产 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 2010 ; int i,n,m;…
[题目链接] 点击打开链接 [算法] 当x = 1时,连边(a,b,0)和(b,a,0) 当x = 2时,连边(a,b,1) 当x = 3时,连边(b,a,0) 当x = 4时,连边(b,a,1) 当x = 5时,连边(a,b,0) 建立超级源点(Super Source),将这个点与所有点连一条权值为1的边,注意加边时要倒着加,否则会时间超限 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 100010 struc…
[题目链接] https://www.luogu.org/problemnew/show/P1312 [算法] 深度优先搜索 [代码] #include<bits/stdc++.h> using namespace std; struct info { int x,y,op; } step[]; int i,n,t,x; ][]; bool solved; inline void print() { int i; ; i <= n; i++) printf(,step[i].y - ,s…
[题目链接] https://www.luogu.org/problemnew/show/P1313 [算法] 二项式定理 [代码] #include<bits/stdc++.h> using namespace std; ; int a,b,k,n,m,ans; ],inv[]; inline int power(int a,int n) { ,b = a; while (n) { ) res = 1ll * res * b % P; b = 1ll * b * b % P; n >&…
[题目链接] http://poj.org/problem?id=1167 [算法] 深度优先搜索 + 迭代加深 [代码] #include <algorithm> #include <bitset> #include <cctype> #include <cerrno> #include <clocale> #include <cmath> #include <complex> #include <cstdio&g…
题目描述 Description 风景迷人的小城 Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0 分钟出现在1号景点,随后依次前往2.3.4……n 号景点.从第i 号景点开到第i+1 号景点需要Di 分钟.任意时刻,公交车只能往前开,或在景点处等待.设共有 m 个游客,每位游客需要乘车1 次从一个景点到达另一个景点,第i 位游客在Ti 分钟来到景点Ai,希望乘车前往景点Bi(Ai<Bi).为了使所有乘客都能顺…
虽然作为IOI的Day1T3,但其实不是一道很难的题,或者说这道题其实比较套路吧. 接下来讲解一下这个题的做法: 如果你做过NOI 2018的Day1T1,并且看懂了题面,那你很快就会联想到这道题,因为两者都是问某一个点能到达的点集,只不过限制在点上还是边上的问题. $Kruskal$重构树可以把在边上的限制转化成点上的,于是能解决NOI 2018的Day1T1:那么这道题就可以直接做,因为限制已经在点上了. 具体来讲,从$s$点只能走编号$>=l$的点,那么我们就构建一棵树,使得任意一个非根节…
题目链接 IOI的签到题感觉比NOI的签到题要简单啊,至少NOI同步赛我没有签到成功…… 其实这个题还是挺妙妙的,如果能够从题目出发,利用好限制,应该是可以想到的做法的. 接下来开始讲解具体的做法: 题目中有一个重要的限制就是答案序列首字母不会出现多次,这意味着当我们知道首字母后,接下来序列中的候选字符就只剩下$3$个了,以及我们可以在一个询问中用首字母来分割多个你想要知道的字符串. 很显然我们可以用二分找到首字母,这将花费$2$次询问机会.方便起见,我们把首字母定为$a$,剩下的$3$个字符分…
http://uoj.ac/problem/29 cdq四次处理出一直向左, 一直向右, 向左后回到起点, 向右后回到起点的dp数组,最后统计答案. 举例:\(fi\)表示一直向右走i天能参观的最多景点数. 其中有一个很重要的条件\(fi≤fi+1fi≤fi+1\),这个条件是分治的前提. 关于这个条件的证明,我想了好久才想出来,用反证法证明一下就行. 分治时需要用主席树维护路径上的前k大和. #include<cstdio> #include<cstring> #include&…
计算1到n的一条路径使得路径上的值xor和最大. 先任意走一条路径计算xor和,然后dfs的时候处理出所有的环的xor和,这样对于所有的环的xor和求线性基,在任意走出的路径的xor和上贪心即可. 正确性显然,如果环与选择的路径有重合,那么重合的部分就会被xor两次,也就没有xor,相当于更改了一部分路径.如果环与选择的路径没有重合,那么相当于从路径上任意一个点到环上的一个点,跑一圈后从进入环的点原路返回,这样环的xor和就计算到了,而往返两次的路径也因为xor了两次相当于没有xor,就不用考虑…
今天才知道莫比乌斯反演还可以这样:$$F(n)=\sum_{n|d}f(d) \Rightarrow f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)$$我好弱,,,对于$$F(i)=\left \lfloor \frac{n}{i} \right \rfloor\left \lfloor \frac{m}{i} \right \rfloor$$反演后$$f(i)=\sum_{i|d}\mu(\frac{d}{i})F(d)=\sum_{i|d}\mu(\frac{d}{i…
完全不会啊,看题解还看了好久,我是蒟蒻$QAQ$ $zyf$的题解挺好的:http://blog.csdn.net/clove_unique/article/details/51059425 $fail树$的性质完全不知道啊,只好现学,,, 根据读入的顺序来扫$Trie树$并更新树状数组真的好神!我一辈子都想不出来$TwT$ 还有$dfs序$那里我还想了好久,,,聪哥说我的表情一脸懵逼 最终看(抄)题解做出来了,用了$4h+$,我好制杖 #include<queue> #include<…
BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node{ static const int mo=100007; int a[100010],v…
转啊转终于转出来了,然而我的模板跟陈竞潇学长的模板一模一样,还是太弱啊,第一次用指针. #include<cstdio> #include<cstring> #include<algorithm> #define for1(i,a,b) for(int i=(a);i<=(b);++i) using namespace std; typedef long long ll; ; int n,m,data[N]; struct node{ node(); node *…
题解: 矩阵裸体. #include<cstdio> #include<cstring> #include<cmath> typedef long long ll; ll n,mod; struct Matrix{ ll a[][]; Matrix (){ memset(a,,sizeof(a)); } inline void e(){ ;i<=;i++) a[i][i]=; } friend Matrix operator *(Matrix x,Matrix y…
Description Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定的步数内消除所有的方块,消除方块的规则如下: 1.每步移动可以且仅可以沿横向(即向左或向右)拖动某一方块一格:当拖动这一方块时,如果拖动后到达的位置(以下称目标位置)也有方块,那么这两个方块将交换位置(参见图6到图7):如果目标位置上没有方块,那么被拖动的方块将从原来的竖列中抽出,并从目标位…
这是一道极好的图论题,虽然我一开始只会做$18$分,后来会做$51$分,看着题解想了好久才会做(吐槽官方题解:永远只有一句话),但这的确是一道好题,值得思考,也能启发思维. 如果要讲这道题,还是要从部分分一点一点讲起,毕竟解题时的思路也是慢慢这么推进的. 首先第一次把所有边都变成同一种颜色,询问可以得到$s$到$t$的无权最短路径的长度$dist$.这个询问是必须的,因为这个$dist$在接下来的判定中起来很大的作用. $Subtask 2$:给定一棵树,知道$s$是根,求$t$: 这个问题将作…
我感觉这个题作为Day2T1,有一定的挑战性.为$Rxd$没有完成这道题可惜. 我觉得这道题,如果按照前几个部分分的思路来想,就有可能绕进错误的思路中.因为比如说每个传感器最多只在序列中出现$2$次,很有可能会想到分别在每一个传感器之后用开关来控制.我在做这个题的时候就因为这个思路陷入僵局.事实上这个做法的弊端十分明显,首先如果可行的话,实现起来也会十分复杂,毕竟所有传感器序列中交错复杂,难于处理:其次,对于每一个传感器分别使用开关很可能导致开关的浪费. 这道题的两个关键的想法都源于其中的两个部…
http://www.lydsy.com/JudgeOnline/problem.php?id=2216 学习了一下决策单调性. 这道题决策单调性比较明显,不详细证了. 对于一个决策i,如果在i之前的j处进行决策,那么i之后的决策都不可能在j之前. 利用决策单调性,可以维护每个决策点形成的单调栈,更新决策点也是利用单调栈的信息在原数组上二分. 这道题假设j<i,然后扫两遍就可以了,时间复杂度\(O(n\log n)\). 看网上的大爷都写得单调队列?整体二分?orz #include<cmat…
http://www.lydsy.com/JudgeOnline/problem.php?id=2212 自下而上贪心. 需要用权值线段树来记录一个权值区间内的出现次数. 合并线段树时统计逆序对的信息就可以了. 时间复杂度\(O(n\log n)\). #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int N…
http://www.lydsy.com/JudgeOnline/problem.php?id=2646 夏令营alpq654321讲课时说这道题很简单但并没有几个人提交,最近想复习一下线段树,脑袋一热就开始写这道题... 询问\([i,j]\)内的抛物线在\([l,r]\)上的最大值,最大值只会出现在抛物线的极值处和\(l\),\(r\)处. 对于出现在极值处的最大值我用线段树套平衡树解决(看claris大佬用KDTree做的orzorzorz) 对于出现在\(l\),\(r\)处的最大值,对…