自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Tuesday

https://yukizzz.github.io/

  • 博客(41)
  • 收藏
  • 关注

原创 POJ 2135_Farm Tour

题意:从出发点到目的地往返一次,道路ii连接着aia_i号和bib_i号,长度为cic_i。同一条路只能走一次,求最小路径长度。分析:如果没有往返,那么就是简单的最短路问题。如果规定严格从左到右,那么就是简单的双调旅行商问题。对于本题,同样还是将往返看成是从出发地开始的两条没有公共边的路径,便可以转化为求流量为2的最小费用流了~注意边为无向边代码:#include<cstdio>#include<

2016-02-27 19:12:49 296

原创 POJ 3469_Dual Core CPU

题意:N个模块可以在A,B两个核上运行,分析:用最小的费用将两个对象分成两个集合的问题,常常可以转换为最小割问题。 按照N个模块在哪个核上运行分成两个集合。并建边使最小费用等于最小割的容量,即转化为求图中最大流。代码:#include<cstdio>#include<vector>#include<cstring>#include<queue>using namespace std;st

2016-02-23 23:19:01 278

原创 POJ 3281_Dining

题意:FJ准备了F种食物和D种饮料,每头牛都有喜欢的食物和饮料,并且每头牛都只能分配一种食物和饮料。问如何分配使得同时得到喜欢的食物和饮料的牛数量最多。分析:首先想到将牛与其对应的食物和饮料匹配起来,即在食物、饮料与牛之间连一条边,再在s和所有食物之间、t和所有饮料之间连一条边。这样每一条路径都对应着食物饮料和牛之间的匹配方案。那么如何避免一头牛被分配多组匹配呢?就将一头牛拆成两个结点,并用一条容量

2016-02-23 07:42:53 252

原创 POJ 3041_Asteroids

题意:N*N网格中有小行星,光束能将一整行或者一整列的行星消灭,问消灭所有行星至少需要多少光束?分析:最小顶点覆盖问题,将每个小行星看成边,左右顶点为横纵坐标,可以转化为二分图,利用二分图中最小顶点覆盖等于最大二分匹配的性质,求出最大二分匹配即可。代码:#include<cstdio>#include<vector>#include<cstring>using namespace std;c

2016-02-22 16:46:11 299

原创 Codeforces 628D Magic Numbers

题意:求[a,b][a,b](a,ba,b不含前导0)之间的d−magicd-magic数中mm的倍数的个数。分析:计数dp Let’s call a number d-magic if digit d appears in decimal presentation of the number on even positions and nowhere else.仔细读题并观察例子就可以明确d

2016-02-22 10:21:28 372

原创 Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】

题意:有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k。分析:dp+矩阵快速幂。 假如现在的数是m,模x余数是n,那么再从下一个block中选一个数a,a模x余数为b,那么新的数的余数就为(m∗10+a)(m*10+a)%x,也就是(n∗10+b)(n*10+b

2016-02-18 10:19:45 585

原创 POJ 2411_Mondriaan's Dream

题意:用1*2和2*1的方块将给定长宽的矩形填满。问有多少种放法,对称的算两种。分析:状态压缩dp 首先用0表示前一行没有竖块占用这个位置,而1表示该位置和他上方的位置放了一个竖块,从而压缩状态。接下来一行一行的看,每一行都只受上一行的影响,同时影响着下一行的状态,那么如何将现在的状态和下一行的状态联系起来呢?令dp[i][j]dp[i][j]表示第i行状态为j时的方案数,直接把两个状态作为参数

2016-02-17 23:43:46 319

原创 POJ 1769_Minimizing maximizer

题意:一系列m个1~n区间,每个区间固定对某个子区间进行排序,顺序选择若干区间,使最终覆盖所有区间。分析: computes the length of the shortest subsequence of the initial sequence of sorters still producing correct results for all possible input data要想

2016-02-17 14:44:49 1066

原创 POJ 3233_Matrix Power Series

题意:求n*n矩阵的幂和分析:逐个加起来时间复杂度太高,通过在矩阵中套个矩阵和,再利用矩阵快速幂,最后时间复杂度为O(n3logn)O(n^3logn)代码:#include<cstdio>#include<iostream>#include<cstdio>using namespace std;typedef long long ll;const int N= 85;int n;st

2016-02-17 09:34:45 316

原创 POJ 3734_Blocks

题意:用红绿蓝黄四种颜色对一序列n个方块涂色,求出绿和红色方块数同时为偶数的染色方案数。mod=10007mod=10007分析:dp+矩阵快速幂 首先明确有三种状态:红和绿均为偶数红和绿只有一个为奇数红和绿均为奇数设前三种方案数分别为aia_i,bib_i,cic_i,则可以得到以下递推式: ai+1=2∗ai+bibi+1=2∗ai+2∗bi+2∗cici+1=2∗cia_{i+1}

2016-02-16 21:22:57 543

原创 POJ 2686_Traveling by Stagecoach【状态压缩DP】

题意:一共有m个城市,城市之间有双向路连接,一个人有n张马车票,一张马车票只能走一条路,走一条路的时间为这条路的长度除以使用的马车票上规定的马车数,问这个人从a出发到b最少使用时间。分析:状态压缩dp,用dp[i][j]dp[i][j]表示到达jj城市的最小时间,其中ii为剩余车票的集合。集合ii使用状态压缩的表示方法。由于剩余车票的集合不断变小,实际上为求DAG最短路问题。代码:#include<

2016-02-16 17:07:44 409

原创 静态区间第k大(主席树)

POJ 2104为例(主席树入门题)思想:可持久化线段树,也叫作函数式线段树,也叫主席树(高大上)。 可持久化数据结构(Persistent data structure):利用函数式编程的思想使其支持询问历史版本、同时充分利用它们之间的共同数据来减少时间和空间消耗。 主席树:对原序列的每一个前缀[1..i][1..i]建立出一棵线段树维护值域上每个数的出现次数(所以要先离散化)。线段树每

2016-02-16 12:52:12 956 2

原创 静态区间第k大(分桶法和平方分割)

思想:《挑战程序设计竞赛》中介绍的方法。 分桶法:把一排物品或者平面分成桶,每个桶分别维护自己内部的信息,已达到高效计算的目的。设一共有nn个数,一个桶有bb个数,给定区间,求小于x的数的个数对于完全包含在区间内的桶,直接二分查找满足条件的个数,每个桶处理需要O(logb)O(logb)的时间。剩余的不完全分布在其他桶的数,逐个查找,每个元素处理需要O(1)O(1)的时间。可以看出,应该

2016-02-15 12:33:23 1663 4

原创 静态区间第k大(归并树)

POJ 2104为例思想:利用归并排序的思想:建树过程和归并排序类似,每个数列都是子树序列的合并与排序。查询过程,如果所查询区间完全包含在当前区间中,则直接返回当前区间内小于所求数的元素个数,否则递归的对子树进行求解并相加。使用STL中的merge对子序列进行合并及排序。时间复杂度O(nlogn+mlog3n)O(nlogn+mlog^3n)代码(vector实现):#include<cs

2016-02-15 12:05:28 899

原创 静态区间第k大(划分树)

划分树:思想:利用快速排序思想,建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半。查询时,在建树过程中利用leftsum[p][i]leftsum[p][i]数组保存有多少个数划分到第pp层,第ii个位置的左边。每次查询计算出每个区间有多少数被放入左子树,小于等于kk则说明所求数在左子树,继续查询其左子树,反之则查询右子树。l==rl==

2016-02-13 22:34:02 807 2

原创 POJ 3468_A Simple Problem with Integers(树状数组)

完全不知道该怎么用,看书稍微懂了点。题意:给定序列及操作,求区间和。分析:树状数组可以高效的求出连续一段元素之和或更新单个元素的值。但是无法高效的给某一个区间的所有元素同时加个值。 不能直接用树状数组求,就处理一下。用两个树状数组维护两个数据,一个维护前ii项和,一个维护增加的值。设:∑j=1iaj=sum(bit1,i)∗i+sum(bit0,i)\sum_{j=1}^i a_j=sum(bit

2016-02-13 12:21:19 467

原创 POJ 3468_A Simple Problem with Integers(线段树)

题意:给定序列及操作,求区间和。分析:线段树,每个节点维护两个数据:该区间每个元素所加的值该区间元素和代码:#include<cstdio>#include<iostream>#include<cmath>using namespace std;typedef long long ll;//[l,r)const int maxn = 300005;ll sum[maxn], ad

2016-02-13 11:13:32 329

原创 ZOJ 2770_Burn the Linked Camp

题意:给定每个兵营的最大容量,以及第i到第j个兵营至少有多少个士兵,问所有兵营一共至少有多少个士兵?分析:差分约束系统,注意第i到第j至少有k个第i到第j最多有最大容量之和个每个兵营至少有0个每个兵营最多有最大容量个代码:#include<cstdio>#include<cstring>#include<iostream>using namespace std;#define me

2016-02-12 09:37:38 423

原创 POJ 3169_Layout

大早上水一发=。=题意:n头牛按编号顺序站成一列,给定那头牛之间的位置关系,求出第n头牛和第一头牛之间的最大距离。分析:差分约束系统,这题不等式关系还是挺好找的。代码:#include<cstdio>#include<iostream>using namespace std;struct edge{int u, v, w; };const int maxn = 1005, maxm = 25

2016-02-12 08:42:34 212

原创 POJ 3684_Physics Experiment

题意:若干球最初从高到低排列,依次落下。 球与地面碰撞,速度不变方向相反,球之间碰撞, 交换速度和方向。问某一时刻各个球的高度。分析:把球之间的碰撞看成是擦肩而过,但是由于半径的存在,最后每个球的高度都要加上2∗i∗r2*i*r,还有注意半径的单位是cmcm代码:#include<cstdio>#include<cmath>#include<algorithm>using namespace

2016-02-11 12:53:15 400

原创 POJ 3255_Roadblocks

题意:无向图,求单源次短路,每条边可以走多次。分析:对于每个点记录最短路和次短路,在更新每个点的最短路时,相应更新次短路,如果最短路更新了,就令次短路等于原来的最短路,如果没有,就看能否直接更新次短路。代码:#include<iostream>#include<queue>#include<cstdio>using namespace std;#define se second#defin

2016-02-11 12:14:56 281

原创 POJ 3723 Conscription【最小生成树】

题意:征用一些男生和女生,每个应都要给10000元,但是如果某个男生和女生之间有关系,则给的钱数为10000减去相应的亲密度,征集一个士兵时一次关系只能使用一次。分析:kruskal求最小生成树,注意男生和女生用偏移量处理。代码:#include<iostream>#include<algorithm>#include<cstdio>using namespace std;struct ed

2016-02-11 11:08:57 444

原创 POJ 3279 Fliptile【枚举】

题意:又是农夫和牛的故事。。。有m*n个黑白块,黑块的背面是白块,白块背面是黑块,一头牛踩一块,则这个块的上下左右的方块都会转动,问至少踩多少块,才会使所有块都变成白色?分析:还是开关问题,同样是一个块的转动会影响其他块的状态,但这次不是简单的线性排列,也不能只踩黑块。首先根据字典序,我们可以对第一排从 00…00到11..11进行考虑(1表示踩),再后续一排一排的考虑。因为踩一块四周的块都会转动

2016-02-10 15:34:42 528

原创 POJ 2785_4 Values whose Sum is 0

题意:A,B,C,D四组数中各取一个数,使这四个数相加为0,问有多少组取法?分析:四个数列有n4n^4种取法,规模较大,但是可以将他们分成AB,CD两组,分别枚举,最后再合并。代码:#include<cstdio>#include<algorithm>#include<iostream>using namespace std;typedef long long ll;const int m

2016-02-10 10:24:23 287

原创 POJ 3276 Face The Right Way【枚举】

题意:N头牛站成一条线,分别朝向前后两个方向,机器可以使连续K头牛同时改变方向,要求所有牛最终朝向前方,问机器操作次数的最小值及此时的最小K值。分析:第一眼看感觉是二分搜索K,再仔细读题, please help him determine the minimum value of K that minimizes the number of operations required by the

2016-02-09 18:50:36 358

原创 POJ 3320_Jessica's Reading Problem

题意:每页书都对应一个知识点,问最少看连续的多少页,才能把所有知识点都看完?分析:《挑战程序设计竞赛》介绍的尺取法,反复推进区间的开头和结尾,来求取满足条件的最小区间,先确定好一个满足条件的区间,然后不断往后移,找满足条件的区间。代码:#include<iostream>#include<vector>#include<cstring>#include<map>#include<cstdio

2016-02-09 13:45:22 286

原创 UVA 10006_Carmichael number

题意:N 为合数,对于任意一个在(1,N)(1,N)之间的数满足 anmodn=aa^n mod n = a 则称N为分析:素数区间筛法+快速幂代码:#include<cstdio>#include<cstring>#include<iostream>using namespace std;typedef long long ll;const int maxn = 65005;c

2016-02-09 10:11:18 1010

原创 POJ 2456_Aggressive cows

题意:给定N个位置,把C头牛分别放入,求相邻两头牛的最大距离。分析:即为求两头牛之间最小距离的最大值。二分搜索答案。代码:#include<iostream>#include<algorithm>#include<cstdio>using namespace std;const int maxn = 100005, INF =0x3fffffff;typedef long long ll;

2016-02-09 09:10:01 248

原创 POJ 1064_Cable master

题意:给定一系列长度的电缆,将他们切成K条相等长度的电缆,问每条最长有多长?分析:对长度进行二分,判断能否满足K条。二分搜索: 在求解最大化或最小化问题中,能够比较简单的判断条件是否满足,那么使用二分搜索法可以很好地解决问题。结束判定: 正常处理整数时,对于[l,r)[l,r)结束范围即为l=rl=r,但是小数的处理就涉及精度的要求了。 在输出小数时,需要设置合理的结束条件满足精度的要求

2016-02-08 21:33:30 279

原创 UVA 11400_ Lighting System Design

题意:给定一系列灯泡的额定功率,电源价钱,一个灯泡的价格以及系统所需该种灯泡的数量。已知流过灯泡的电流相等,所以为省钱可以将电压小的灯泡换成电压大的灯泡,但是不能换成电压更小的灯泡,问最少要花多少钱。分析:首先要明确:只要是电压大的比电压小的便宜,就一定要用大的替换小的灯泡。替换必须是全部替换,不能替换一部分,即用某一种大的替换某种小的全部的灯泡。反正替换的灯泡个数没有限制,为什么不尽可能多的把

2016-02-08 01:33:21 356

原创 POJ 2240_Arbitrage

题意:给定一系列货币汇率,求能否从一种货币,经过一系列转换,最终转化回更高价值的该种货币。分析:即为求最长路并判断是否存在“正”权值回路,这里用的bellmanford算法。代码:#include<iostream>#include<cstring>#include<map>using namespace std;const int maxn = 50, maxm =1005;int n,

2016-02-08 01:10:29 268

原创 POJ 1182_食物链

题意:三种动物A,B,C,A吃B,B吃C,C吃A, 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是”1 X Y”,表示X和Y是同类。 第二种说法是”2 X Y”,表示X吃Y。 此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。 1) 当前的话与前面的某些真的话冲突

2016-02-08 00:53:15 348

原创 POJ 2431 Expedition【贪心】

题意:卡车每走一个单元消耗一升汽油,中途有加油站,可以进行加油,问能否到达终点,求最少加油次数。分析:优先队列+贪心代码:#include<iostream>#include<queue>#include<algorithm>using namespace std;const int maxn = 10055;typedef pair<int, int>pii;pii p[maxn];

2016-02-07 23:21:44 374

原创 POJ 3268_Silver Cow Party

题意:n个地方,标号1~n,每个地方都有一头牛,现在要他们都去往标号为x的地方,再从x返回,每条道路都是单向的,求所有牛走的来回的最短路中的最大值。分析:注意在求每头牛走到x时,挨个算肯定超时,可以在将道路反向处理,都变成从x出。之前用vector模拟邻接表超时,后来用链表和数组分别模拟了邻接表,好像数组模拟的更快一些。代码:链表:#include<iostream>#include<cstdio

2016-02-07 23:12:47 305

原创 POJ 1061 青蛙的约会【扩欧】

题意:两只青蛙在地球同一纬度不同位置x,yx,y向同一方向跳,每只青蛙跳的长度不同m,nm,n,纬线总长度l,问两只青蛙是否能相遇,跳几次才相遇。分析:可知,问题可转化为求(m−n)∗x≡(y−x)(modl)(m-n)*x ≡ (y-x) (mod l)的最小值解代码:#include<iostream>using namespace std;typedef long long ll;ll

2016-02-07 12:58:56 687

原创 【数学】扩展欧几里得算法

欧几里得算法:辗转相除计算两个数的最大公约数,求gcd(a,b)gcd(a,b)。证明:设a=b∗p+qa=b*p+q,则gcd(b,q)|bgcd(b,q)|b ,gcd(b,q)|agcd(b,q)|a ,故gcd(b,q)|gcd(a,b)gcd(b,q)|gcd(a,b) 。 同样q=a−b∗pq=a-b*p,则gcd(a,b)|qgcd(a,b)|q,故gcd(a,b)|gcd(b,q)

2016-02-07 12:31:19 3293 1

原创 Codeforces 404D Minesweeper 1D

题意:给定字符串,其中’*’表示地雷,’1’表示左/右边有一个地雷相邻,’2’表示左右两边均有地雷相邻,’0’表示左右均无地雷相邻,’?’表示待定,可填入0,1,2或者地雷,有多少种表示方法使字母串满足规定。分析:不难想到用dp[i][j]dp[i][j]其中j为0,1,2,3(即四种状态),表示下标为i的元素为j状态时,前i+1个字符满足规定的种数。起初这样做,每次都还需要对前一个元素为’1’时进

2016-02-03 18:51:27 650

原创 UVA 10564_ Paths through the Hourglass

题意:由0-9的数字组成一个形如沙漏的图形,要求从第一行开始沿左下或者右下到达最后一行,问有多少种不同的路径,是最后路径上的整数之和为给定的某个数。分析:简单计数dp,从最后一行开始,设dp[i][j][k]dp[i][j][k]为从下往上已经走过i行,走到第j列,此时路径上的整数之和为k的路径种数。得到递归方程:dp[i][j][k] += dp[i-1][j][k-a[i][j]] +dp[i-

2016-02-02 18:33:34 343

原创 UVA 674_Coin Change

题意:给定一个数,求用1,5,10,25,50有多少种组合方式。分析:简单计数dp,注意dp[i][0]dp[i][0]初始化为1,因为一个元素也不选的方法总是有一种。代码:#include<iostream>#include<cstring>using namespace std;const int maxn =10005;long long dp[10][maxn];int main

2016-02-02 10:47:45 294

原创 Codeforces 621C Wet Shark and Flowers

题意:一群鲨鱼围成一圈,Wet Shark说个质数p,每个鲨鱼在一定范围内选个数,如果两个相邻的鲨鱼选的数的乘积能被p整除,则每个鲨鱼都将得到1000元,求鲨鱼们最终得到钱数的期望。分析:比赛时乱七八糟的写,一直错,重新读题才注意到题目中说的: If for any pair of neighbouring sharks i and j the product si·sj is divisibl

2016-02-02 08:50:28 434

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除