- 博客(35)
- 收藏
- 关注
原创 图论的一些概念 支配集 覆盖集 独立集
点支配集(Vertex Dominating Set)设无向图为G(V,E),顶点集合V*⊆\subseteq V,若对于∀ \forall v ∈\in (V-V*), ∃\exists u ∈\in V*,使得(u,v) ∈\in E,则称u支配v,V* 为G的一个点支配集。 通俗地讲,V中的顶点要么是V*集合中的元素,要么与V* 中的一个顶点相邻。极小支配集: 若支配集V*的任何真子集都不
2017-08-22 10:40:13 4712
原创 【ZOJ2112】Dynamic Rankings 树状数组套主席树
动态查询区间第k大。 先用主席树保存一个静态的情况,然后用树状数组套主席树保存修改操作,空间复杂度为O(n*logn+q*logn*logn)。 因为主席树本身是有前缀和性质的数据结构,所以可以外加一个树状数组,树状数组的节点为一棵线段树。一次修改的时空复杂度为O(logn*logn)。#include<bits/stdc++.h>using namespace std;const int
2017-07-26 13:40:25 358
原创 有上下界的网络流小结
1. 无源汇可行流 对于有下界的网络流,首先要想办法去掉下界,做法是把原图中的流量分成流b和f’,其中b的流量为原流量下界,f′=f−bf'=f-b。 虚拟一个源点s和一个汇点t,对每个点u,设D(u)=∑bin−∑boutD(u)=\sum_{}b_{in}-\sum_{}b_{out},若D(u)>0D(u)>0,从s连一条容量为D(u)的流到u,否则连一条容量为-D(u)的流到t。其实这个
2017-07-11 20:29:37 450
原创 【POJ3680】Intervals 最小费用最大流
题意:给定N个带权开区间,每个区间有一定的权重,现要求从中选一些区间,要求任意点不被超过K个区间覆盖,求最大的总的权重。思路:做这道题需要对网络流有一定的理解。注意到题目中的约束是每个点不被超过K个区间覆盖,则以这些点为网络流中的点,覆盖次数的限制即流量的限制。想象所有点都在一条数轴上,源点与第一个点相连,汇点与最后一个点相连,容量都为K。每个点一次相连,容量为INF,这样可以保证每个区间都能被选到
2017-07-07 18:55:41 328
原创 【HDU4052】【ZOJ3540】Adding New Machine 线段树+扫描线
题意:W*H的格子上放着一些旧机器,现在要往图上放1*M的新机器,问放机器的方式有多少种 做法:把每个旧机器的范围扩展一下,向左&向下扩展m-1个格子,这样就转化为了求矩阵面积并的问题。同时要把矩形位置坐标转化为线的坐标。 注意考虑long long…#include<bits/stdc++.h>#define mid int m = (l+r)>>1;#define lson l, m,
2017-06-30 22:14:02 399
原创 【HDU4430】【ZOJ3656】Bit Magic 2-SAT
2-SAT模版题 使用位运算之间的依赖关系建图。 需要注意的是 x | y = 0 时 x -> !x, y->!yx&1 = 1时候 !x -> x, !y->y直接把所有位放在一起判断的话内存不够,所以每一位判断一次。 要注意数组从零开始。 同时在ZOJ上要注意判断对角线上是不是都是0。#include<bits/stdc++.h>using namespace std;con
2017-06-28 19:43:39 279
原创 【CCFCSP】201604-3 路径解析
试题编号: 201604-3 试题名称: 路径解析 时间限制: 1.0s 内存限制: 256.0MB//参考了别人的博客本题主要考察对字符串的修改操作。可以用string保存路径信息,再使用string的类函数进行操作。 首先读入当前目录,要注意在之后的P行路径中的相对路径表示的是相对初始当前目录的路径,而不是上一次的结果目录。如果读入的是相对路径,可以直接把初始目录和相对路
2017-04-10 20:28:39 1066
原创 【CCFCSP】201512-3 画图
试题编号: 201512-3 试题名称: 画图 时间限制: 1.0s 内存限制: 256.0MB本题需要模拟平面上的字符画,容易想到用一个二维字符数组来保存图上的元素,但是需要注意途中的坐标表示方式和C++语言中的不同,(左下角为(0,0)坐标,向右为x坐标增大的方向,向上为y坐标增大的方向),在下面的代码中,图上坐标为(x,y)的点被保存在map[n-y][x]中。 分别考
2017-04-10 20:25:41 737
原创 【CCFCSP】201509-3 模版生成系统
试题编号: 201509-3 试题名称: 模板生成系统 时间限制: 1.0s 内存限制: 256.0MB本题主要考察的是字符串的处理,如果使用string的函数,可以使代码实现简单很多。 可以用STL中的map保存变量和它的值。然后对输入中的标记进行替换,因为同一行中可能存在多个需要被替换的变量,所以每次修改后再次寻找标记,直到找不到能够修改的位置。 注意如果字符串中的变量
2017-04-10 20:24:05 666
原创 【CCFCSP】201503-3 节日
试题编号: 201503-3 试题名称: 节日 时间限制: 1.0s 内存限制: 256.0MB这是一道比较简单的日历题。一般的日历题都需要计算不同日期之间的天数间隔,同时要考虑到闰年的情形。如题目中所描述的,年份是400的整数倍时是闰年,否则年份是4的倍数并且不是100的倍数时是闰年,其他年份都不是闰年。 题目要求求出从公元y1年到公元y2年间的每年的a月的第b个星期c的日
2017-04-10 20:22:59 637
原创 【CCFCSP】201412-3 集合竞价
试题编号: 201412-3 试题名称: 集合竞价 时间限制: 1.0s 内存限制: 256.0MB整个交易中有多个买单和卖单,要求求一个开盘价使得出价大于等于开盘价的买单总股数与小于等于开盘价的卖单总股数之间最小值最大,即能把最多的卖出股票卖给买入的人。 注意读入数据的方式,因为题目中输入数据有任意多行,所以以EOF(end of file)作为读入结束的条件。在C++中可
2017-04-10 20:19:33 1390
原创 【CCFCSP】201409-3 字符串匹配
试题编号: 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB这是一道基础的字符串匹配问题,可以使用遍历的方法判断一字符串是否被另一字符串包含。这里把被判断字符串记作a,如果要判断a串是否在b串中,可以枚举b串中第一个和a匹配的位置,然后再判断是否a整个串都和b串的剩余字符匹配。 对于不区分大小写的情况,可以把a和b字符串都转换为小写形
2017-04-10 20:17:40 952
原创 【CCFCSP】201403-3 命令行选项
试题编号: 201403-3 试题名称: 命令行选项 时间限制: 1.0s 内存限制: 256.0MB本题使用STL中的map可以使得实现变得很简单。 首先用字符串读取第一行,如果某一字符之后是“:”,则type记为1,即带参数选项,否则type为2,即不带参数选项,字符串的最后一个字符要做特殊判断(有可能为“:”或选项)。 然后读取每一行的输入,对字符串的内容逐个处理,因
2017-04-10 20:12:58 2916 2
原创 【CCFCSP】201312-3 最大的矩形
试题编号: 201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB本题的简单做法很容易想到,可以直接遍历矩形的起点,向后从这一矩形开始的所有矩形,找出最大面积,此时矩形的高度应该是所有矩形高度的最小值。 另一种做法是保持一个高度变高的栈,遇到比栈顶低的高度时出栈计算高度。includeincludeincludeincludeinclude
2017-04-07 22:15:03 417
原创 【CCFCSP】201609-3 炉石传说
试题编号: 201609-3 试题名称: 炉石传说 时间限制: 1.0s 内存限制: 256.0MB场上的两名玩家轮流进行游戏,每个玩家场上最多有7个随从,而场上的随从总是从左到右排列,即在场上不会有空位。这道题其实可以不用和下文中的代码一样把函数放在结构体中,这么做只是为了让代码逻辑更加清晰。#include<iostream>#include<cstring>#incl
2017-03-31 00:39:30 972
原创 【CCFCSP】201609-2 火车购票
试题编号: 201609-2 试题名称: 火车购票 时间限制: 1.0s 内存限制: 256.0MB因为火车的座位号是连续的,而对于每一排,总是编号小的座位先被卖出,所以可以考虑用一个数组保存每一排被卖出的座位数量。 在每次寻找能买的座位时,先遍历一遍数组查看是否有一排的剩余座位大于等于要买的数量,如果有,就选择第一个满足要求的排。 如果买不到同一排相邻的座位,就从头往后寻
2017-03-30 23:06:13 1300 1
原创 【CCFCSP】201609-1 最大波动
试题编号: 201609-1 试题名称: 最大波动 时间限制: 1.0s 内存限制: 256.0MB这是一道比较容易的题目,根据题意,波动即为邻两个元素差绝对值。 只要遍历整个数组,然后计算相邻元素之差绝对值的最大值即可。int a[1010];int main() { int n; cin >> n; for (int i = 1; i <= n;
2017-03-30 22:33:36 449
原创 【CCFCSP】201612-3 权限查询
试题编号: 201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB//这道题用STL拿了90,改成用结构体拿了满分 首先要理清题意,用户可以拥有多个角色,其中不同的权限可以有名称不同的权限,也可能拥有名称相同,等级不同的权限。 在处理查询时,要考虑的情况有:查询是包含等级的分等级权限,不包含等级的分等级权限,不包含等级的不分等级权限。(不会
2017-03-30 22:22:24 578
原创 【CCFCSP】201612-1 中间数
试题编号: 201612-1 试题名称: 中间数 时间限制: 1.0s 内存限制: 256.0MB根据题意,“中间数”的性质是比它大的数的数量等于比它小的数的数量。所以可以先对这个数组排序,然后遍历数组,求出比每个数大的数的数量和比它小的数的数量。再遍历一遍求出中间数。 以下的代码中用到了STL中的sort函数对数组进行排序。(需要包含algorithm头文件)int a[1
2017-03-30 19:50:25 465
原创 【CCFCSP】201604-1 折点计数
试题编号: 201604-1 试题名称: 折点计数 时间限制: 1.0s 内存限制: 256.0MB题目中“折点”意味着在该点两边直线的斜率符号相反,于是遍历每个点(除边界点)寻找满足条件的点。int a[1010];int main(){ int n; cin>>n; for(int i = 1;i<=n;i++) cin>>a[i]
2017-03-30 00:15:33 520
原创 【CCFCSP】201612-2 工资计算
试题编号: 201612-2 试题名称: 工资计算 时间限制: 1.0s 内存限制: 256.0MB因为题目中税后工资最多只有100000,所以可以从税前工资1遍历到一个售后能大于100000的工资数,每次计算在这个工资下的税后工资,和输入相比较,如果相等就输出。#include<iostream>#include<cstring>#include<cstdlib>#in
2017-03-29 22:17:27 991
原创 【CCFCSP】201703-3 Markdown
试题编号: 201703-3 试题名称: Markdown 时间限制: 1.0s 内存限制: 256.0MB比较简单的字符串处理问题,用if-else语句对每种情况做不同的操作。 Markdown的行内语法可以在最先进行转换,然后用转换后的字符串替换读入串,比较简单。 还要注意读入段落和无序列表时结束标记的输出,具体可以以下代码的处理。int main() { st
2017-03-29 22:01:56 806
原创 【CCFCSP】201703-2 学生排队
int a[1010];int main(){ int n,m,p,q; cin>>n>>m; for(int i = 1;i<=n;i++) a[i] = i; while(m--){ cin>>p>>q; int pos1,pos2; for(int i = 1;i<=n;i++){ if(
2017-03-29 00:43:54 655
原创 【CCFCSP】201703-1 分蛋糕
int main(){ int n,k,t,left = 0,ans = 0; cin>>n>>k; while(n--){ cin>>t; left += t; if(left >= k){ left = 0; ans++; } } if(left
2017-03-29 00:39:49 654
原创 网络流之最大流和最小割
最大流问题最大流:给定有向图中每条边的最大流量(容量),求从源点到汇点的最大流量。容量网络: 括号左边代表容量,右边代表流量。残留网络:流网络中剩余可增加的流量增广路:满足容量条件的一条流量不为零的路径。增广路定理:设容量网络G(V,E)的一个可行流为f,f为最大流的充要条件是在容量网络中不存在增广路。Ford-Fulkson方法:搜索残留网络找增广路,直至找不到增广路(找到最大流)。Edmonds
2017-02-16 11:32:52 7540
原创 【数论】【逆元】【贪心】HDU5976 Detachment
题目链接题意:给出一个数x,存在∑ni=1ai=x\sum_{i=1}^n a_i= x,ai!=aja_i != a_j 使得∏ni=1\prod_{i=1}^n 最大,求∏ni=1\prod_{i=1}^n 的最大值。解题思路:容易发现要使得积最大,要把x分得尽可能小。所以把x分成2,3,4,5,…,i的形式。从2开始是因为分成1并不会使积更大。如果x能直接分成这个形式,就可以直接得出答案。
2016-12-02 16:09:47 422
原创 USACO_Wormholes
原题地址 题目大意: 一个二维图上有N个虫洞(N一定是偶数),从一个虫洞可以直接传送到另一个和它相连的虫洞,(有且只有一个虫洞与某个虫洞相连)。进入虫洞的方向和出虫洞的方向一致。给出虫洞的坐标,问存在几种配对的方式使得小明(雾)从某个点出发回陷入无限循环.. 一点感想.. 这道题在搞组合的时候就出了点问题,一下子不知道怎么去除重复的组合..然后看了官方的解题视频,被震惊了.. 直接用par
2016-10-26 20:00:38 948
原创 POJ2528
题目地址题意:墙上有n张海报,每张海报在水平方向有覆盖的范围,问贴上n张海报后还能看见的有多少张。 需要注意的是,题目中的覆盖范围应该如下图所示: |-1-|-2-|-3-|-4-| 而不是 | - | - | - | - | 1 -2-3- 4 -5 因为题目的数据范围较大所以要对坐标进行离散化。 如把2,100,5000,12321离散成0,1,2,3。 同时要注意区间1,2 3
2016-10-22 11:01:14 244
原创 POJ3468
和上一题差不多。 给出n个数,存在两种操作,Q(打印∑bi=aAi\sum_{i=a}^b A_i),C(Ai+=c,a=<i<=bA_i+=c,a=<i<=b)。 同样使用线段树进行处理 因为long long的问题交了几发不必要的WA.. #include<iostream>#include<cstdio>#include<algorithm>using namespace std;
2016-10-19 18:42:06 241
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人