
算法
大学期间训练题目
黄油^小饼干
不干活,就没饭吃。
展开
-
C++派生类的构造函数与析构函数
存个代码#include <bits/stdc++.h>using namespace std;class Parent {protected: int pnum;public: Parent(){ pnum = 0; cout << "调用Parent的无参构造函数" << endl; } Parent(int pnum) { ...原创 2020-03-09 16:06:40 · 250 阅读 · 0 评论 -
Highways POJ - 1751
题目链接:https://cn.vjudge.net/problem/POJ-1751题目:给出n个点的坐标,然后,有m条路已经修好,问把所有点都联系起来,最小的花费是多少。分析:最小生成树。。。先把已经修好的连起来,再用最小生成树求就可以了。#include<iostream>#include<cstdio>#include<string.h>...原创 2019-08-01 20:07:31 · 151 阅读 · 0 评论 -
qdu17级区域赛组队训练7-1_2013成都
F - Fibonacci Tree HDU - 4786 题目 Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to do some research on Spanning Tree. So Coach Pang decides to solve the following proble...原创 2019-07-01 22:49:47 · 229 阅读 · 0 评论 -
树状数组模板
树状数组模板#include<iostream>#include<cstdio>#include<string.h>using namespace std;const int N = 100010;int n,m,a[N],c[N];int lowbit(int x){ return x & (-x);}void updata(...原创 2019-08-05 11:13:38 · 113 阅读 · 1 评论 -
树的直径模板
dfs#include<iostream>#include<cstdio>#include<string.h>#include<vector>using namespace std;int ans,f;bool vis[10010];struct node{ int to,d;};vector<node> v[1...原创 2019-08-01 21:14:12 · 123 阅读 · 0 评论 -
扩展欧几里得模板
扩展欧几里得:对于不完全为0的非负整数a和b,gcd(a,b)表示a,b的最大公约数,必然存在整数x,y,使得ax+by=gcd(a,b)。因为:gcd(a,b) = gcd(b,a%b)所以:bx1+(a%b)y1 = ax+by bx1+(a-a/b*b)y1 = ax+by ay1+b(x1-a/b*y1) = ax+by令:x=y...原创 2019-07-22 21:20:13 · 114 阅读 · 0 评论 -
最短路模板
朴素版Dijkstra#include<iostream>#include<cstdio>#include<string.h>using namespace std;#define inf 0x3f3f3fconst int N=510;int n,m;int mp[N][N];int dis[N];bool vis[N];int di...原创 2019-07-17 16:53:34 · 134 阅读 · 0 评论 -
拓扑排序模板
拓扑排序#include<iostream>#include<vector>#include<string.h>#include<queue>using namespace std;int n,m;int deg[100];//度 vector<int> G[100];void TPsort(){ queue&l...原创 2019-07-17 16:44:27 · 105 阅读 · 0 评论 -
最长上升子序列模板
最长上升子序列O(n^2)#include<iostream>#include<cstdio>#include<string.h>using namespace std;const int N=1005;int a[N],dp[N];int main(){ int n,ans=-1; scanf("%d",&n); for(...原创 2019-07-09 14:07:50 · 141 阅读 · 0 评论 -
POJ1273--网络流模板题
题目大致意思就是:有m个池塘,n条水渠,给出这n条水渠连接的池塘以及所能流过的最大水量,问水渠中所能流过的最大容量是多少。网络流模板题。网络流相关知识:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html代码#include<iostream>#include<cstdio>#include&...原创 2019-07-02 14:42:42 · 370 阅读 · 0 评论 -
Windows Message Queue 优先队列
题目Message queue is the basic fundamental of windows system. For each process, the system maintains a message queue. If something happens to this process, such as mouse click, text change, the system...原创 2019-05-21 15:51:41 · 827 阅读 · 0 评论 -
80 Days--尺取法
题目链接:https://cn.vjudge.net/problem/HihoCoder-1831题目大意有n个城市围成一个圈,编号1--n,没到一个城市会获得a[i]元,前往下一个城市时会失去b[i]元,一开始有c元,问能否从一个城市出发,转一圈回到自己,并且途中每个时刻的值都是不小于0的。分析尺取。。。代码#include <iostream>#incl...原创 2019-09-03 09:03:32 · 167 阅读 · 0 评论 -
Finding Seats--尺取法
题目A group of K friends is going to see a movie. However, they are too late to get good tickets, so they are looking for a good way to sit all nearby. Since they are all science students, they decide...原创 2019-05-22 20:23:10 · 348 阅读 · 0 评论 -
小小粉丝度度熊--尺取法
题目度度熊喜欢着喵哈哈村的大明星——星星小姐。为什么度度熊会喜欢星星小姐呢?首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听。但这都不是最重要的,最重要的是,星星小姐拍的一手好代码!于是度度熊关注了星星小姐的贴吧。一开始度度熊决定每天都在星星小姐的贴吧里面签到。但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到。不过度度熊并不是非常悲伤,因为...原创 2019-05-20 20:29:56 · 185 阅读 · 1 评论 -
费马小定理求逆元
如果p是素数,则a ^ (p - 1) = 1 % p即a ^ (p - 2) * a = 1 % pa ^ (p - 2)就是a的逆元求快速幂的时候,最好先把a模一下。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 20;const ll mod...原创 2019-11-30 20:15:03 · 324 阅读 · 0 评论 -
Diophantus of Alexandria--唯一分解定理
题目大意:给定n,求满足1/n = 1/x + 1/y的整数对的个数(x和y互换算一种)。分析:可令x<=y。1/n = 1/x + 1/y,1/n = (x+y) / xy,n=xy / (x+y),(x+y)*n = xy,有公式可以看出,x和y必定大于n,所以令x=n+a,y=n+b,带入可得:n ^ 2 = ab。这样就转换成了求n ^ 2的因子个数。当ans为偶数时,答案为...原创 2019-07-24 21:09:00 · 139 阅读 · 0 评论 -
Deciphering Password--唯一分解定理
题目大意:给定a和b,1 <= a, b<= 1000000,求出a ^ b的因子个数,暂且称为n,计算1^3+2^3+......n^3。分析:立方和公式:1^3+2^3+......n^3 = (n * (n+1) / 2) ^ 2。利用唯一分解定理求出a ^ b的因子个数,但是数据范围实在是太大,光因子个数就会爆long long,所以,在每次求出prime[ i ]的指数...原创 2019-07-24 20:50:03 · 223 阅读 · 0 评论 -
The Luckiest number--欧拉函数+快速幂
题目:大致意思就是给你一个L,1<=L<=2,000,000,000,让你找出一个最小的数字,该数字是L的倍数,并且只由数字8组成,输出该数字的位数。分析:这个数字可以表示成8 * (10 ^ x - 1)/9,目的就是求出最小的x,满足L |8 * (10 ^ x - 1)/9,' | '表示整除。设d = gcd(8 , L),下面是我的理解:在L |8 * (10...原创 2019-07-24 16:19:38 · 336 阅读 · 0 评论 -
A/B
题目要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。Input数据的第一行是一个T,表示有T组数据。每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。Output对应每组数据输出(A/B)%9973。Sample Input...原创 2019-07-21 22:37:27 · 88 阅读 · 0 评论 -
Leading and Trailing
题目:给定n和k,求n^k的前三位和后三位。分析:后三位直接用快速幂取模运算就可以了。前三位:令x=log10(n^k),则10^x=n^k,又10^x=10^a*10^b(a为x整数部分,b为x小数部分),10^a只影响小数点的位置,不影响前三位的数字,所以只求出10^b就可以了。因为0<b<1.0,所以1.0<10^b<10.0,取前三位乘100.0即可。#i...原创 2019-07-21 22:13:51 · 119 阅读 · 0 评论 -
小数第n位--蓝桥
题目我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。输入格式一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是所求的小数后位置(0<a,b,n<1000000000)输出格式一行3位数字,表示:a除以b...原创 2019-05-16 18:03:38 · 973 阅读 · 1 评论 -
Black & White--牛客网,二分,前缀和
题目描述你有一个长度为 n 的 01 串S,你可以执行最多 m 次操作。对于每次操作,你可以选择一个位置 i 满足 1≤i≤n,翻转这一位的值,0变成1,1变成0。定义一个 01 串的价值为其中最长连续0的个数和最长连续1的个数的较大值,求S在经过最多m次操作后的最大价值。输入描述:* 第一行一个整数 T ,表示接下来有 T 个样例。* 首先输入n,m,表示S串的长度n和操作次数m,其...原创 2019-05-05 19:49:51 · 362 阅读 · 0 评论 -
火星文字典
题目大意已知一种新的火星文的单词由英文字母(仅小写字母)组成,但是此火星文中的字母先后顺序未知。给出一组非空的火星文单词,且此组单词已经按火星文字典序进行好了排序(从小到大),请推断出此火星文中的字母先后顺序。输入描述:一行文本,为一组按火星文字典序排序好的单词(单词两端无引号),单词之间通过空格隔开。输出描述:按火星文字母顺序输出出现过的字母,字母之间无其他字符,如果无法确定...原创 2020-04-15 20:09:48 · 937 阅读 · 0 评论 -
Reward HDU - 2647
题目链接:https://cn.vjudge.net/problem/HDU-2647题目老板发工资以及报酬,一共n个人,m个关系,每个关系中给出a和b,表示a的报酬要大于b的报酬,每个人的基本工资都是888元,问老板最少发多少工资。如果不能合理分配,输出-1。分析每输入一对a,b,就将a的度加1,然后拓扑排序就可以了。注意如果有环的话,那么一定不能合理分配。另外需要再开一个数组d...原创 2019-08-01 18:51:11 · 213 阅读 · 0 评论 -
大臣的旅费--Java实现
问题描述很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J是T国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了J最常做...原创 2020-02-13 16:22:44 · 266 阅读 · 0 评论 -
Edge Deletion--最短路+bfs
题目链接:https://vjudge.net/problem/CodeForces-1076D题目大意:给出n个点,m条边,最多能保留K条边。原图上每个点的最短路为di。现在删除了边后,使得到点1的距离仍为di的点数量最多的情况下,输出应该保留的K条边的编号。分析:既然要使结果最大,那就尽可能多保留边,即k条边。跑一遍最短路,求出1到每个点的最短距离,然后bfs,如果某条边在最短路的路径...原创 2019-12-07 21:49:37 · 239 阅读 · 0 评论 -
Currency Exchange POJ - 1860
题目链接:https://cn.vjudge.net/problem/POJ-1860题目第一行,n种货币,m个关系, 你拥有的货币种类以及数量。接下来m行,每行六个数,a,b,c,d,e,f,表示a换成b需要本金减去d,再乘以汇率c,b换成a需要减去f,再乘以汇率e。问你有没有可能交换一圈后货币数量增加。分析首先建立边,例如a->b,起点是a,终点是b,这条边的汇率是c,需...原创 2019-08-01 19:33:45 · 121 阅读 · 0 评论 -
Buy Tickets--树状数组
题目链接:https://cn.vjudge.net/problem/POJ-2828题目大意有n个数,依次给出每个数插在第几个数后面,以及这个数是多少,求最终的序列。分析最后插入的位置肯定是确定的,所以从后往前看,假设x插在第i个数后面,那么x前面一定有i个空格,二分找到这个位置,然后将这个位置剔除,以此类推。代码#include <iostream>#i...原创 2019-08-25 20:03:22 · 243 阅读 · 0 评论 -
Lost Cows--树状数组
题目链接:https://cn.vjudge.net/problem/POJ-2182题目大意n头牛,给出每头牛前面有几个编号比其小的,求出该序列。分析倒着看,假设最后一个数前面有i个比它小的,那么它就是第i+1个数,接着将第i+1个数从这n个数中剔除,假设倒数第二个数前面有j个比它小的,那么它就是剩下的数中第j+1个数,以此类推,二分查找树状数组即可。代码#includ...原创 2019-08-25 19:57:42 · 1881 阅读 · 0 评论 -
Counting Offspring--dfs序+树状数组
题目链接:https://cn.vjudge.net/problem/HDU-3887题目大意有一棵以p为根的树,找出每个点的子树中,编号比其小的数量。例如,9号节点的子树有2,8,10,11,比9小的有两个,那么输出2。分析先dfs序,把每个点及其子树放在一个连续的区间内。接下来,就是要求比每个节点编号小的数量了。我们可以从1号节点开始,即从最小的开始,先查询dfs后对应区间内有...原创 2019-08-24 22:31:47 · 258 阅读 · 0 评论 -
Data Structure?--树状数组
题目链接:https://cn.vjudge.net/problem/HDU-4217题目大意在一个含有1-n的序列中,每次找到第Ki小的数,并把它删除。第一个数T,表示测试数据的组数。每组测试数据,第一行2个整数n和m,m表示操作的轮数。接下来m行,每行一个整数k,表示要找出第k小的数,并把它删除。分析先把每个数放到自己的位置,query函数查询x之前,包含x在内的没被删...原创 2019-08-08 23:00:09 · 123 阅读 · 0 评论 -
Turing Tree--树状数组+离散化+离线处理
题目链接:https://cn.vjudge.net/problem/HDU-3333题目大意给定长度为n的序列,m个询问,每次查询[L,R]范围内不同元素的和。分析离散化不说了,注意在求和时计算的是离散化前的值,不是离散后的。先将要查询的区间存下来,按照右端点从小到大的顺序,右端点相同时按左端点从小到大的顺序排序,用vis数组来记录每个元素最后出现的位置。每次把在位置q[i].r...原创 2019-08-05 20:45:29 · 186 阅读 · 0 评论 -
线段树模板
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5 + 5;int n, m;struct node { int l, r, sum, lazy;}tr[N&l...原创 2019-09-08 10:40:45 · 206 阅读 · 0 评论 -
New Year Tree--线段树+dfs序+状态压缩
题目链接:https://cn.vjudge.net/problem/CodeForces-620E题目大意一棵树,1 z x表示把以z为根的子树节点(包括z)的颜色,更新成x,2 z表示询问以z为根的子树的颜色种类。分析首先要dfs序,把子树区间弄成连续的区间,放入线段树内。因为一共60种颜色,我们可以用一个long long的二进制数来表示,颜色为1,就把第一位设成1,颜色...原创 2019-08-28 13:59:07 · 207 阅读 · 0 评论 -
Greg and Array--线段树建两棵树
题目链接:https://cn.vjudge.net/problem/CodeForces-296C题目大意给出长度为n的序列,有m种操作,然后k行,每次给出要执行的操作种类,例如1 3,是将1--3折三种操作进行一次。求最后的序列是多少。分析对原始序列进行操作,需要建一棵树来维护,而每次要执行的操作区间,也要建一棵树来维护,所以一共需要建两棵树。代码#include &...原创 2019-08-25 20:09:38 · 265 阅读 · 0 评论 -
Danil and a Part-time Job--线段树dfs序
题目链接:https://cn.vjudge.net/problem/CodeForces-877E题目大意有一棵以1位根节点的树,每个节点都有一盏灯,或亮或灭,m次操作,get x,表示求x以及其子树中,所有亮着的灯的数量,pow x,表示把x以及其子树灯的状态改变,即1变为0,0变为1。分析通过这个题学会了dfs序。dfs序的思想就是,从根节点开始dfs,记下每个节点第一次...原创 2019-08-24 20:39:26 · 258 阅读 · 0 评论 -
Can you answer these queries III--线段树求最大连续子段和
题目链接:https://cn.vjudge.net/problem/SPOJ-GSS3题目大意:n个数,m次操作,0,x,y,表示把a[x]位置的数改为y,1,x,y,表示求[x,y]的最大连续子段和。#include <iostream>#include <cstdio>#include <cstring>#include <algor...原创 2019-08-19 17:17:41 · 138 阅读 · 0 评论 -
Hotel--线段树区间合并模板题
题目链接:https://vjudge.net/problem/POJ-3667题目大意有n个车位,一开始全是空的。m个要求,1 k,表示有k辆车要停,且位置要连续,找到编号最小的位置输出,如果停不下,就输出0;2 x k,表示从x位置开始,有连续k辆车开走。分析1代表有空位,0代表没有空位。tr[m].left代表从左端点向右,连续1的区间长度,tr[m].right代表从右端点...原创 2019-08-18 19:08:17 · 133 阅读 · 0 评论 -
Count Color--线段树
题目链接:https://vjudge.net/problem/POJ-2777题目大意有一个长度为L的木板,T种颜色,O次操作,每次操作时,‘C’表示涂色,‘P’表示询问区间内有几种不同的颜色。涂色时l,r代表的是l区域到r区域。初始木板颜色为1。分析线段树更新以及查询。更新不说了,查询时标记一下该颜色,最后统计1--T内有几种被标记的就ok了。注意,0也会被标记,但是不能算在a...原创 2019-08-07 12:22:15 · 279 阅读 · 0 评论 -
Billboard--线段树
题目链接:https://cn.vjudge.net/problem/HDU-2795题目大意每年开学,正是各大社团招新之际。每个社团为了吸引更多的小学妹小学弟就会派出身强体壮的华师男去海报墙上粘贴海报。开学之初,高为h,宽为w的海报墙还是空的。然后,华师男轮流粘贴高为1,宽为wi的海报。贴海报时,机智的华师男总是会优先选择最上面的位置来帖,而且在所有最上面的可能位置中,他会选...原创 2019-08-07 11:17:18 · 166 阅读 · 0 评论