Area皮克定理:皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,
Xor Path思路先是看错题目,以为是所有的路径异或值的和,然后好像用了个假的print函数,一直wa,,,既然是异或,那么当一个点出现的次数是偶数次的时候它会被自己异或成零,也就是队整体的答案没有贡献度,所以我们只要统计有多少条路经过了这个点就行了。
线性基P3812 【模板】线性基#include <bits/stdc++.h>using namespace std;typede
这一算法的核心思想是通过两边之和大于第三边不断逼近两个点的距离,最后得到最短距离。再通过不断的入列出列,最后使距离不能再小,得到最小距离。
CF196E Opening Portals给定一个有nnn个节点,mmm条边的无向联通图,有kkk个点有portalsportalsportals,当经过了某个点,如果这个点有portalportalportal,它就会永久开启,对于任意两个开启的portalportalportal,我们可以不需要花时间穿行,问开启所有的portalportalportal需要多少时间。可以考虑这是一个1−>Sv1->S_v1−>Sv,SvS_vSv是另kkk个portalsportalspo
P4768 [NOI2018] 归程给定一个nnn个点,mmm条边的无向联通图,边的描述为[u,v,l,a][u, v, l, a][u,v,l,a],表示uuu,vvv连有一条长度为lll,海拔为aaa的边,有QQQ个询问,每次给出一个出发点uuu和一个海拔限制高度ppp,并且在出发点有一辆车,这辆车可以通过海拔大于ppp的边,问,从u−>1u->1u−>1的最短步行长度是什么多少。设从uuu坐车出发可到的点集为SSS,我们的任务就是找到一个点v,v∈Sv, v \in Sv,v
kruskal重构树如何建树模仿kruskalkruskalkruskal,先将所有边排序。依次遍历每一条边,如果这条边的两个节点(u,vu, vu,v)不在同一个连通块里面,则新建一个nodenodenode节点,更新fa[u]=fa[v]=nodefa[u] = fa[v] = nodefa[u]=fa[v]=node,同时有fa[node]=nodefa[node] = nodefa[node]=node,建立node−>u,node−>vnode-> u, node-&g
Function!fa(x)=ax(a>0, a≠1)f_a(x) = a ^ x(a > 0, \ a \neq 1)fa(x)=ax(a>0, a=1),我们要求∑a=2n(a∑b=an⌊fa−1(b)⌋⌈fb−1(a)⌉)\sum\limits_{a = 2} ^{n} \left(a \sum\limits_{b = a} ^{n} \lfloor f_a ^{-1}(b) \rfloor \lceil f_b ^{-1}(a) \rceil \ri
概率期望LOOPSdp[i][j]dp[i][j]dp[i][j]表示从i,ji, ji,j到r,cr, cr,c的期望,
P4602 [CTSC2018]混合果汁共有nnn种果汁,第iii种果汁的美味度为did_idi,每升价格为pip_ipi,在一瓶混合果汁中,最多只能添加lil_ili升。有mmm个询问,每次询问给出两个数g,Lg, Lg,L,我们要找出价格不大于ggg,体积不小于LLL的混合果汁的最大美味度。混合果汁的美味度为所有参与混合的果汁的最小值,如果没有满足条件的混合果汁则输出−1-1−1。把果汁按照美味度排一个序,对每个询问二分枚举did_idi,然后judge[i,n][i, n][i,n]上
P6271 [湖北省队互测2014]一个人的数论∑i=1nim[gcd(i,n)=1]∑d∣nμ(d)dm∑i=1ndim由伯努利数可知∑i=0nim=1m+1∑i=0mCm+1iBi(n+1)m−i+1设fi=1m+1Bm−i+1Cm+1i,则有∑d∣nμ(d)dm(∑i=1m+1fi(nd)i+(nd)m)∑i=1m+1fini∑d∣nμ(d)dm−i+(nm∑d∣nμ(d))考虑后项∑d∣nμ(d)dm−i,迪利克雷卷积乘积,为积性函数F(n)=∑d∣nμ(d)dm−i,F(1)=1,F(pk)=
网络流初步 + Edmond-Karp算法网络流的基本概念源点,这个点只有流量的流出,没有流入。汇点,这个点只有流量的流入,没有流出。容量,每条有向边的最大可承受的流的理论大小。流量,每条有向边的最大可承受的流的实际大小。最大流,从源点可流入汇点的最大流量。
The Sum of Unitary Totient积性函数,满足质数点是多项式,直接 min_25 了,由于单次求解,所以使用递归的 min_25 会较快。#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int prime[N], a[N], id1[N], id2[N], cnt, n, T, m;long long sum1[N], sum2[N], g1[N], g2[N], s[N
E. Almost Sorted我们定义 almost sorted 数组为,ai+1≥ai−1a_{i + 1} \geq a_i - 1ai+1≥ai−1,也就是说,先写几项出来看看:n = 11n = 21 22 1n = 31 2 31 3 22 1 33 2 1容易发现一定是,形如x,x−1,x−2,…,1,…x, x - 1, x - 2, \dots, 1, \dotsx,x−1,x−2,…,1,…,这样的,也就是前缀是一连串的下降的数字,假设数字长
D. Steps to One设f[i]f[i]f[i]为gcd\gcdgcd为iii,还需要多少个数,那么有f[i]=1+∑j=1mf[gcd(i,j)]mf[i] = 1 + \frac{\sum\limits_{j = 1} ^{m} f[\gcd(i, j)]}{m}f[i]=1+mj=1∑mf[gcd(i,j)],f[1]=0f[1] = 0f[1]=0,考虑化简∑j=1mf[gcd(i,j)]\sum\limits_{j = 1} ^{m} f[\gcd(i, j)]j=1∑mf
F - Colorful Tree给定一棵树,边有边权,且每条边有一个颜色,有mmm次操作,每次给定x,y,u,vx, y, u, vx,y,u,v,如果把颜色为xxx的边,边权修改为yyy,求u,vu, vu,v两点的距离,考虑设111号节点为根节点,设d[i]d[i]d[i]为111到iii的距离,dis(u,v)=d[u]+d[v]−2×d[lca]dis(u, v) = d[u] + d[v] - 2 \times d[lca]dis(u,v)=d[u]+d[v]−2×d[lca],设nu
B. The Tortoise and the Hare给定一个长度为nnn的数组a,(1≤ai<m)a, (1 \leq a_i < m)a,(1≤ai<m),mmm是一个给定的数(1≤m≤109)(1 \leq m \leq 10 ^ 9)(1≤m≤109),有QQQ次操作,分为两类:给定u,v,(1≤u≤n,1≤v<m)u, v,(1 \leq u \leq n, 1 \leq v < m)u,v,(1≤u≤n,1≤v<m),把数组上aua_uau的值改为
2016-2017 ACM-ICPC CHINA-Final A. Number Theory Problem(规律、签到) #include <bits/stdc++.h> using namespace std; int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); int T, n, cas = 0; scanf("%d", &T); while
Mr. Panda and Kakin 给定n,cn, cn,c,要我们找到nnn是两个相邻质数的乘积,要我们找到xxx,满足x230+3≡c(modn)x ^{2 ^{30} + 3} \equiv c \pmod nx230+3≡c(modn),1010≤n≤1018,0<c<n10 ^{10} \leq n \leq 10 ^ {18}, 0 < c < n1010≤n≤1018,0<c<n, 考虑得到230+32 ^{30} + 3230+3模ϕ(n)\phi(n
D. Best Edge Weight 给定一个有nnn个点mmm条边的无向连通图,有mmm次询问,每次询问第iii条边的权值最大为多少,这张图的所有最小生成树的方案中,一定包含第iii条边。 先跑一边最小生成树,得到最小生成树,然后依次统计答案,分两种情况: 1、这条边在最小生成树上 假设这条边的边权为valuevaluevalue,把这条边断开,则分成了两个集合A,BA, BA,B,那么有一个性质,从集合AAA连向集合BBB的边,边权一定大于等于valuevaluevalue, 如果从集合AAA连向集合
A and B and Lecture Rooms题意要求我们找有多少个点iii满足dis(i,x),dis(i,y)dis(i, x),
LCA求解的四种模板或许更好的阅读体验树剖在线求解LCA思想树剖这里就不多解释了,求解LCA的过程就是轻重链的跳转,跟树剖求任意两点间的距离一样的操作,只不过不用线段树去维护disdisdis了,那就直接上代码吧。
Three Blocks Palindrome (hard version)思路考虑到每个数字的范围是1 2001 ~ 2001 200,于是我们可以通过枚举两侧的元素来寻找最优答案。我们有一个贪心策略,两侧都以我们枚举的元素作为结尾点,假如我们当前枚举的数字是1,
珂朵莉树简要珂朵莉树的核心操作:split实际很简单,一个集合中,有一部分需要修改
线段树合并略谈线段树合并说全来就是动态开点权值线段树合并
P4175 [CTSC2008]网络管理每次询问两点间的第kkk大,
Modular Stability思路(((xmod a1)mod a2)……mod ak−1)mod ak=(((xmod p1)mod p2)……mod pk−1)mod pk(((x \mod a_1) \mod a_2) ……
题目测试链接代码/* Author : lifehappy*/#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>#define mp make_pair#define pb push_back#define endl '\n'#define mid (l + r >> 1)
乌龟棋思路最优值问题,显然可以通过dpdpdp解决,我们定义dp[i][j][k][l]dp[i][j][k][l]dp[i][j][k][l]表示到达1+i∗2∗j+3∗k+4∗l1 + i * 2 * j + 3 * k + 4 * l1+i∗2∗j+3∗k+4∗l这个点之前已经走过的价值最大的值(i,j,k,li, j, k, li,j,k,l分别是走一步,走两步,走三步,走四步的数量),
F. Cheap Robot给定一个无向连通图,每条边有边权,路过需要消耗对应的电量(边权),有kkk个中心点,问从a−>ba-> ba−>b,我们最少需要带多少电,设最小为CCC,当通过一条边时,我们的电会减少(当电不够时即不能通过),当经过中心点时我们的电会立刻变为CCC,比较简单的想法:处理出任意两个中心点对的最短路出来,最后我们只需要得到中心点对的升序kruskalkruskalkruskal最小生成树,然后每次查询两点之间的lcalcalca的权值即可。我们假设dis[x
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号