- 博客(39)
- 收藏
- 关注
原创 从队友那偷来的主席树模板(静态区间第k小)
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PII; const int MAXN = 1e6+10; const double EPS = 1e-12; int n,m,cnt; int sum[MAXN<<5],rt[M...
2019-11-12 14:28:10
247
原创 网络流基础模型——任务分配模型(HDU 3572)
题目链接: 题解思路:先构建一个超级原点0,由原点连向n个任务,每条边的流量为p[i],然后有每个任务连向他们自身的时间点s[i]->e[i],每条边的流量为1,最后再由时间点连向超级终点,每条边流量为m(机器的数量),最后跑一遍最大流,判断满流即可。 #include<bits/stdc++.h> using namespace std; typedef long long...
2019-11-02 14:19:16
1365
原创 HDU 5521 Meeting(建图思维)
题目链接 题解思路:对于完全图而言,图中每一个点都可以直接到达其他点,题目中又已说明每个完全图中边的权值一样,因此我们可以对每个完全图加一个“超级原点”,最后跑两遍 dijkstra 即可。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,int> PI...
2019-11-01 13:11:44
185
原创 初学网络流——最小费用流(白书模板,dij)
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PII; const int MAXN = 1e4+10; const int MAXM = 1e5+10; const double EPS = 1e-12; int n,m,s,t,f; ...
2019-10-31 11:58:13
265
原创 初学网络流——最大流模板(dinic)
多组输入只需把vector清零即可 o( ̄︶ ̄)o #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PII; const int MAXN = 1e4+10; const double EPS = 1e-12; int n,m,s,t; s...
2019-10-30 21:14:27
148
原创 2018 ICPC 沈阳G - Best ACMer Solves the Hardest Problem(细节+思维)
题目链接 题解思路:首先最最重要的就是要注意到1e7这个数很暧昧,它非常小,因此两个整数的平方和 <= 1e7 的情况是十分有限的,我们可以先预处理1——1e7 = 另外两个数平方和 的情况,之后在m次询问中枚举这些情况即可。经过程序计算,1——>1e7内可以由另外两个数的平方和构成的最多的是“5928325”,而组成它的对数仅有48个。 #include<bits/stdc++...
2019-10-18 16:35:08
416
原创 几何——判断两条线段是否严格相交
struct Line { double x1,y1,x2,y2; }; bool check(Line l1,Line l2) { //快速排斥实验 if(max(l1.x1,l1.x2)<min(l2.x1,l2.x2)||max(l1.y1,l1.y2)<min(l2.y1,l2.y2)|| min(l1.x1,l1.x2)>max...
2019-10-14 19:06:39
350
1
原创 极角排序模板+判断象限
int xx(point a) //判断象限 { if(a.x>0&&a.y>=0)return 1; if(a.x<=0&&a.y>0)return 2; if(a.x<0&&a.y<=0)return 3; if(a.x>=0&&a.y<0)retur...
2019-10-08 16:03:08
351
原创 2018-2019 ICPC南京区域赛 D.Country Meow(最小球覆盖)
题目大意:在三维平面上给出 n 个点,要你找出一个点使得这个点到这 n 个点的最远距离最小,输出这段距离。 题解思路:模拟退火 (正解:三分套三分) 。 模拟退火算法本质上是一种随机概率寻优算法,其出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。但是本片博客就不深入模拟退火算法的探究了,这里推荐两篇大佬博客,有兴趣的朋友可以去看下: 大佬博客一 大佬博客二 先上代码: #i...
2019-09-13 14:31:27
1191
原创 2018 CCPC吉林赛区 F.The Hermit(数学不等式判结论)
题目链接 HDU 6560 题解思路: 首先,我们根据题目给的条件能归结出几个不等式: (1) k <= j < i ; (2) k >= i - rad[i] + 1 >=1; (3) k >= j - rad[j] + 1 >=1; (4) i <= j + rad[j] -1 ; (5) j - k >= i - j >=1...
2019-09-11 19:04:44
553
原创 2019 ICPC徐州网络赛 K.Center
题目链接 题解思路:把每两个点的对称中心用map记录下来,最后的答案就是n减去成为中心对称的点的最多次数。 #include<bits/stdc++.h> using namespace std; #define maxn 1005 #define ll long long typedef pair<int,int> PII; const int mod = 1e9 +...
2019-09-10 16:07:04
271
原创 2019 ICPC徐州网络赛 B.so easy(unordered_map)
看了好多篇别人写的题解,感觉好像不少都有点错误,于是自己来写一篇。 题目链接 #include<bits/stdc++.h> using namespace std; #define maxn 300005 #define ll long long const int mod = 1e9 + 7; unordered_map<int,int>f; int n,q,x,...
2019-09-10 15:40:12
227
原创 2018-2019 ICPC焦作区域赛B - Ultraman vs. Aodzilla and Bodzilla
本题解借鉴了某大佬的博客,由于那篇博客里有点小错误,因此我这里重写一篇,希望大家在看到我的博客的同时也关注一下那位大佬。 大佬博客地址 题目链接 题解思路:很显然,要使奥特曼受到的伤害最小,肯定要先杀死一只怪兽,所以我们就分类讨论先杀A还是先杀B。 //不少人可能会说比较一下A,B的攻击力,先杀攻击力高的一定会更优。但这是错误的,比如一个100血10攻的怪和一只3血9攻的怪,显然是要先杀3血9攻的...
2019-09-10 11:33:23
694
原创 2019南昌ICPC网络赛 H.The Nth Item(矩阵快速幂+欧拉降幂+数学处理)
#include<bits/stdc++.h> using namespace std; #define maxn 100005 #define ll long long typedef pair<int,int> PII; const int mod = 998244353; const int modd = 998244352; //素数欧拉降幂 ...
2019-09-09 11:42:55
223
原创 2019 HDU 多校第9场 1002.Rikka with Cake(树状数组+离散化)
#include<bits/stdc++.h> using namespace std; #define maxn 100005 #define ll long long #define ls l,mid,rt<<1 #define rs mid+1,r,rt<<1|1 typedef pair<int,int> PII; const int m...
2019-08-19 17:04:01
197
原创 HDU 6609 Find the answer(权值线段树+二分)
题目链接 题解思路:对于每个位置,求出需要减掉的数 然后在权值线段树上进行二分找答案。 #include<bits/stdc++.h> using namespace std; #define maxn 200005 #define ll long long #define ls l,mid,rt<<1 #define rs mid+1,r,rt<<1|1 ...
2019-08-15 17:59:50
221
原创 2019HDU 多校第三场 1006.Fansblog (威尔逊定理+素数判定)
题目大意:给你一个质数P,要你求出P的上一个质数Q,求Q! % P的值。 题解思路:根据威尔逊定理可知如果P是一个素数,那么( P - 1 )! ≡ -1 % P,然后我们就可以将我们要求的式子进行转化,( P - 1 )! = Q! * ( Q+1 )( Q+2 ) * … * ( P-1 ),所以Q! % P = -1/ ( Q+1 )( Q+2 ) * … * ( P-1 ) % P。然后...
2019-08-07 15:15:03
189
原创 单调栈(模板)
找左右第一个小于自己的值: int top=0; for(int j = m ; j >= 1 ; -- j){ while(top!=0&&s[i][j]<s[i][st[top]]) l[st[top]]=j,top--; st[++top]=j; } top=0; for(int j = 1 ; j &l...
2019-07-23 15:13:57
266
原创 线性筛/欧拉筛(模板)
1.线性素数筛 int prime[maxn],vis[maxn]; int cnt; void init(){ for(int i=2;i<maxn;i++){ if(!vis[i])prime[++cnt]=i; for(int j=1;j<=cnt;j++){ if(i*prime[j]>=maxn)brea...
2019-07-23 12:55:30
219
原创 Jzzhu and Cities(最短路计数)
题目链接 题目大意:这个国家有n个城市,编号1-n,编号1的城市为首都,城市之间有m条双向道路连接,同时有k条火车路线可以直接让其他城市与首都城市连接,每条火车路线也存在自己的距离长度,因为火车路线的修建存在一定花费,现在需要保证首都在其余的n-1个城市的距离最短的情况下,去除一些没没必要的火车路径,问最多能去除几条。 题解思路:在用dijkstra 求最短路时,其实最短路的条数是可以确定的。这个...
2019-07-22 19:25:40
604
原创 POJ 3255 Roadblocks(次短路模板题)
题目链接 #include<bits/stdc++.h> using namespace std; #define maxn 5005 #define ll long long typedef pair<int,int>PII; const int INF = 1e9+7; int n,r; int dis[maxn],dis2[maxn]; struct edge{...
2019-07-22 19:12:56
216
原创 初学 数位dp(HDU 2089,洛谷 P2657 [SCOI2009]windy数)
例题1:HDU 2089 #include<bits/stdc++.h> using namespace std; #define maxn 300005 #define ll long long int n,m; int a[20],dp[20][2]; int dfs(int pos,int pre,int sta,bool limit){ if(pos==0)re...
2019-07-05 18:17:27
212
原创 E. Product Oriented Recurrence(矩阵快速幂+欧拉降幂)
#include<bits/stdc++.h> using namespace std; #define maxn 300005 #define ll long long const int mod = 1e9+7; const int modd = 1e9+6; ll n,f1,f2,f3,c; int b[10][10]; struct Mat{ ll m[10][10]; ...
2019-06-14 21:51:27
428
原创 初学矩阵快速幂
洛谷 P3390 #include<bits/stdc++.h> using namespace std; #define maxn 300005 #define ll long long const int mod = 1e9+7; int n; ll k; struct Mat{ ll m[105][105]; Mat(){ for(int i=1;i<=n;...
2019-06-13 15:45:52
173
原创 牛客小白月赛14 E.等比数列三角形
我们先按题意,把三角形的三条边用(x,kx,k²x),由于我们枚举的时候是从小到大枚举,所以我们这里默认k>=1。 要满足三角形的条件,x+kx>k²x——>(1-√5)/2<k<(1+√5)/2; 最终我们推出来k的范围是 [ 1,(1+√5)/2 ) 我们把k转换成分数形式:k=p/q; 之后我们枚举只需要考虑1 ≤ q ≤ √n,1 ≤ p < q*(...
2019-06-05 12:34:42
336
原创 牛客小白月赛14 B.投硬币
通过数学原理推公式 ,可得: 有k次成功的概率为:C(n,k) * p^k * (1-p)^(n-k) 有k+1次成功的概率为:C(n,k+1) * p^(k+1) * (1-p)^(n-k-1) …… 有n次成功的概率为:C(n,n) * p^n * (1-p)^0 这里我们很容易推出每一种情况的公式: C(n,i) * p^i * (1-p)^(n-i) 然后将 k — n 的每一项加起来,求...
2019-06-05 12:09:30
301
原创 湖南大学第十五届程序设计竞赛
B Kuangyeye’s Resistance 这题需要一定的物理知识,将电阻串并联的关系理清,在加一个递推式即可。 #include<bits/stdc++.h> using namespace std; #define maxn 100005 #define ll long long ll n,R,p; ll a[maxn],b[maxn]; ll poww(ll a,l...
2019-06-01 18:15:44
277
原创 EOJ Monthly 2019.5 (based on May Selection) B.幂运算
这题是一道不容易写的数学题,并且题目只给了1s,就是说O(n)的算法都会T(我T了无数发),这时我们就要从别的方向考虑了。 我们发现a,b,c,d都是在1e9范围内的,就是说如果我们把a和c看成x ^ k1和x ^ k2,那么k1,k2<=32,这下子我们的运算量一下就小下来了。 题目要求的是a ^ b = c ^ d,我们把a,c按照上面那样处理,变成x ^ k1和x ^ k2,这样最...
2019-05-31 20:04:36
299
原创 浅谈分块思想
分块算法实质上是一种是通过分成多块后在每块上打标记以实现快速区间修改,区间查询的一种算法。其均摊时间复杂度为 O(√ n) 分块算法相较于各种树形数据结构,具有简便易写,方便调试等多种优点。在同等数据规模下,如 1e5 ,其时间效率并不会低太多,在考试时反而是一种有力的得分方法。 但是若是数据量到1s/5e5以上,基本上就会T… 分块的实质 分块其实是一种树形结构,它是一种只有三层的树,形态如下:...
2019-05-31 12:32:21
880
转载 浅谈ACM算法学习与有效训练
一、什么是有效地训练? 很多ACMer入门的时候,都被告知:要多做题,做500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。 我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。 其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间,算是入门了吧,而且这500道题目中自己独立思考做出来的有多少,半小...
2019-05-31 12:02:03
246
原创 Nate and Game(差分数组)
题目大意 在一个平面坐标系里,给你 n 个三角形,让你选出一条平行于 x 轴的线,能穿过最大数量的三角形。 废话不多说,直接上代码,自行理解。 #include<bits/stdc++.h> using namespace std; #define maxn 2000005 int n; int a[maxn]; int maxx(int a,int b,int c){ b...
2019-05-14 20:09:38
250
原创 字节跳动-文远知行杯 广东工业大学第十四届程序设计竞赛(7题)
A - hzy 和 zsl 的生存挑战 这道题很有意思啊,在不知道答案的情况下很多人在比赛的时候可能会很着急就难以考虑到方方面面,其实只需要一个人说 0,一个人说 1,就一定能活下来 这题就没必要附上代码了。 G - 简单数学题 这道题数据量很大,显然是需要推公式的。 我们将公式拆分开后,就会得到这样一个式子: 那么如何计算他们呢?这里就需要一些数学公式了 有了这个式子,上面就会变成 至...
2019-05-11 21:28:03
518
原创 The 14-th BIT Campus Programming Contest(7题)
A.两只脑斧(签到题) 这题就不多叙述,直接上代码 #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; int main(){ char ss[5]; ...
2019-05-11 20:18:44
662
原创 【模板】最小生成树优化版(Kruskal)
最小生成树问题 给定一个无向图,如果它的某个子图中任意两个顶点都互相连通,那么这个图就叫做生成树。如果边上有权值,那么使得边权和最小的生成树叫做最小生成树(MST)。 但是!!! 如果这个图不连通呢? 有时题目会让你自行判断图是否连通,若不连通输出-1,连通输出权值和。 其实我们只需要加入一个flag判断一下就好了 下面是我用kruskal写的最小生成树模板并加入了判断,如果不了解kruskal的...
2019-05-07 19:42:51
403
原创 洛谷P3366【模板】最小生成树(Kruskal)
Kruskal算法的核心:并查集加贪心 思想内容:要让n个点连通,那么至少选n-1条边,又要让各边的长度之和最小,那么只要每次选出最短的边即可,但是注意已经联通的点无须再增加多余的边,这个可以用并查集判断,是否在一个集合内。 #include<iostream> #include<cstdio> #include<algorithm> #include<...
2019-05-01 21:56:45
485
原创 并查集
#include<iostream> #include<algorithm> #include<cstring> #include<string> #include<cmath> #include<queue> #include<vector> using namespace std; #define maxn...
2019-04-10 18:46:36
144
原创 单源最短路——dijkstra算法
首先我们应该考虑的是如何将这个图中的每条有向边表示出来 刚开始大家肯定都会想到用二维数组,用坐标来写两个点间的距离,但这会造成时间和空间的巨大浪费,因此,我们就需要新型高效的方法来储存这些有向边—— 1.链式前向星 struct edge { int next; int to; int val; }a[maxn]; int head[maxn];//head[i]为i...
2019-04-10 16:42:06
414
原创 (逆元+快速幂)求组合数
大多数的编程问题都离不开数学问题,而排列组合作为数学的一重要分支,自然也会被列入编程学科里来。 下面给出一道简单例题: 众所周知,不定方程的解有0个或者若干个。 给出方程: 想知道这个不定方程的正整数解和非负整数解各有几个。 (链接:https://ac.nowcoder.com/acm/contest/553/D来源:牛客网) 很容易的,我们通过数学方法能推出正整数解s1=C(m-1,n-1)...
2019-04-07 16:42:06
920
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅