题目 传送门 思路 最大的跳跃距离为\(l\) 也就是说实际影响答案的就是区间\(i\)~\(i+l\)的石头的最小值 就相当于水管的流量是由最小的横截面决定的 代码 #include<iostream> using namespace std; int n,m; long long a[100005]; long long s[100005]; long long ans=(1ll<<60);
题目描述 小 G 是一个出色的诗人,经常作诗自娱自乐。但是,他一直被一件事情所困扰,那就是诗的排版问题。 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以放的句子数目是没有限制的。小 G 给每首诗定义了一个行标准长度(行的长度为一行中符
最短路问题有3种常用方法: Floyd,Dijkstra,SPFA 以下为总结代码(参考) Floyd 可求图中任意两点间的最短路 时间复杂度上有很大不足----O(N^3) 代码难度简单 #include<bits/stdc++.h> typedef long long ll; using namespace std; ll n,m,k; ll s[1005][1005]; int main() {
code: #include <bits/stdc++.h> #define N 100005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int n,edges; double f[N]; int hd[N],to[N<<1],nex[N<<1],size[N]; void add(int u,int v) {
题目 传送门 思路 暴力做法大家都会,而且分还不低 但是当你打暴力的时候,你会发现很多问题被重复求解 子问题1 怎么快速统计个数 设\(dp[i][j]\)为以i号节点的子树且距离小于k的城市数总和 dp的初始值为1,因为不管k为多少,都至少有它本身一个 \(dp[u][k]=1+\sum_{i}^{i\in son} dp
题目 思路 首先对于对于高低电压,其实就是二染色问题 有了这个想法之后 自然就会想到图中的环的奇偶性 如何快速的判断呢? 笔者用的是建树+LCA的办法 之后,如果是奇环,环上的所有的边+1 如果是偶环,则-1 用树上差分的办法可以以 \(O(1)\)的优秀时间复杂度处理 之后判断每一个边的值是
https://www.luogu.org/problem/P1170 #include<bits/stdc++.h>using namespace std;int a[100005],b[100005],c[100005],d[100005],n;int main() { cin>>n; for(int i=1; i<=n; i++) { int a,b,c,d; cin>>a>>b>>c>
zkt没素质果然考炸了! 但是他考炸了和我一个分 这场的状态是真的不好,T3比较简单但没有做,一直干T2结果还是跪了 T1的哈希写挂了,模数比int大了结果一乘就炸long long了。 调了一个小时,傻逼哈希啊调了一个小时。。。心态初崩。 然后看到T2感觉不是特别难就写出来了。少考虑了一种情
区间加值,区间求和的树状数组,通过差分来实现。 并没有线段树那么通用。 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll bit[100005]; ll bit2[100005]; int n; void add(int x, ll v) { for(; x <= n; x += x & -x) bit[x] += v; } ll s
题目描述 思路 代码 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; // #define max(a, b) (a) > (b) ? (a) : (b) // #define min(a, b) (a) > (b) ? (b) : (a) int n, m; int arr[100005], f1[100005][21], f2[100005][2
水一道计数题,增加博客数目(雾) #include<bits/stdc++.h>using namespace std;const int mod=1000000007;int n,m,ne,head[100005],a,b,dp[100005][4];struct node {int to,nxt;}eg[100005<<1];void adde(int u,int v){eg[++ne].to=v;eg[ne].nxt=head[u];head[u]=ne;}void
一道很好的换根dp题。考场上现场yy十分愉快 给定树,求每个点的到其它所有点的距离异或上m之后的值,n=100000,m<=16 只能线性复杂度求解,m又小得奇怪。或者带一个log像kx一样打一个线段树 我们可以发现,m小的话对距离很大的路径的影响也不会超过16。 那么变化的其实就是最后4个二进制位
“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。 输入格式: 输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣的对数;随后 N 行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 999
题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A All-one Matrices 点击查看 进入讨论 686/3129 通过 B Beauty Values 点击查看 进入讨论 936/2199 通过 C CDMA 点击查看 进入讨论 777/1263 通过 D Distance 点击查看 进入讨论 157/1023 已补 E Explorer 点击
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2176 题目大意:给定一个非递减数列Ai,你只需要支持一个操作:求一段区间内出现最多的数字的出现次数。 思路:st表。首先要把原序列A分成块。相等的数我们合成一块并把这一块的
RT,这是一道强联通分量。 而我一个热爱匈牙利的OIer 默默敲下了... #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<map> using namespace std; int n,m,cnt,vis[100005],match[100005],head[100005],now[100005]; map<strin
https://ac.nowcoder.com/acm/contest/884/K 一开始整了好几个假算法,还好测了一下自己的样例过了。 考虑到300的倍数都是3的倍数+至少两个零(或者单独的0)。 求以第i个位置的数为结尾的前缀和为j的数的方案数。 当遇到至少两个0的时候,ans+=dp[0][i-2]+1。 +1是那两个0的贡献。 这样子
题目链接 题目简述:首先吧,这道题我们用DP。毕竟它有可转移的状态又是求最优解。选择了DP之后考虑维度,一开始我想的是棋盘嘛,再加一个时间,三维一套带走。可是看了数据范围,会爆炸,数组都开不了,实力劝退。那么题目给了我们什么呢? 鼹鼠的位置,出现的时间 但是我们上面的分析发现,这两个
的确是入门题 #include<bits/stdc++.h>#define N 100005#define inf 1000000000using namespace std;int n,q,a[4*N];struct Edge{ int u,v,next;}G[N];int tot=0,head[N];int size[100005],wson[100005],fa[100005],d[100005],top[100005];int tpos[100005],pre[100005],
题目链接 很妙的一道题。 题目要求$X^3$的期望值。 直接求不好求。 考虑先求出$X$和$X^2$的期望值,然后再求$X^3$的期望值。 迎.刃.而.解. #include<iostream>#include<cstdio> using namespace std; double p[100005],x1[100005],x2[100005],x3[100005];int main(){
动态点分治好题 首先我们考虑一个暴力做法: 每次修改之后选一个点作为根搜索整棵树,然后换根dp即可 考虑每次换根时,移向的点的消耗会减少子树代价之和*边权,而其余部分代价会增加剩余代价*边权 这样每次换根都是$O(1)$的,总时间复杂度$O(nm)$,可以通过...20分! 贴代码: #include <cstdio>
点分治好题 统计距离正常点分治统计即可,我们只需考虑何时达到最优 有两种情况: 第一:代价最大的询问两个端点在不同的两个子树中 因为这种情况下,无论根向那个子树移动都会等价地增加到达另一个端点的代价,因此此时总代价已经达到最小 第二:代价最大的询问有多组,且这些点不在同一棵子树
题面:https://www.luogu.org/problemnew/show/P3106 本题三次建图: 先将GPS1的图存入邻接表。跑一遍dijkstra 然后将GPS2的图再存入邻接表。再跑一遍dijkstra 最后将2次跑过的dijkstra,得到的最短路后所发出的警告数(分别不在2个Gps的次数)当成边权,再跑一遍dijstra。 Code: #incl
题面lalala 这居然是个紫题???原谅我觉得这题是模板。。。 这个这个,这题的算法呢其实是一个叫差分约束的东西,也是今天下午我们机房的重点,如果不知道这个差分约束是个啥的人呢,自行百度一下谢谢。。 好吧还是简单介绍一下,简而言之,就是对一堆子不等式进行最短路模型化,然后依照问题用最短(
ST表是用来求RMQ问题(求区间最大或最小值问题)的实用数据结构,支持\(O(nlog_n)\)建立,\(O(1)\)查询,是比较高效的结构 其原理实质上是DP(我最讨厌的东西) 题面:屠龙宝刀... 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复