自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

懒人一枚。

好好努力吧,少年。

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

原创 UVA11396-Claw Decomposition(二分图判定)

题目链接 题意:是否能将一张无向连通图分解成多个爪型。每一条边只能属于一个爪型,每个点的度数为3. 思路:当图分解成类干个爪型时,每条边只属于一个爪子,所以每条边的两个点一定要处于2个不同的鸡爪中 代码: #include #include #include #include #include using namespace std; const in

2014-09-29 15:56:04 856

原创 UVALive3211- Now or later(二分+2-SAT)

题目链接 题意:有n架飞机。每架飞机都可以选择早着陆和晚着陆两种方式之一,且必须选择一种。任务就是安排所有飞机着陆时,相邻两个着陆时间间隔的最小值尽量大。 思路:用二分处理最小值尽量大。该题目可以转化为是否存在一个调度方案,使得相邻两个着陆时间差总是不小于P,进一步转化为任意两个着陆时间差总是不小于P。,假设布尔变量xi表示第i架飞机是否早着陆,唯一限制就是“时间差小于P的

2014-09-28 15:47:22 1128

原创 UVA11324-- The Largest Clique(SCC+DP)

题目链接 题意:给出一张有向图,求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足:要么u可以到到v,要么v可以到达u(u和v可以互相到达) 思路:我们可以缩点,用Tarjan求出所有强连通分量,让每个SCC的权值等于它的结点个数。由于SCC图是有一个DAG,使用DP求解。 代码: #include #include #include #inclu

2014-09-28 11:03:01 1220

原创 UVALive4287-- Proving Equivalences(SCC+Tarjan)

题目链接 题意:证明n个命题全部等价,已经给出m此推导,求至少还要几次推导才能完成整个证明。 思路:可以将命题看作结点,推导看作有向边,则本题就能转化为n个结点m条边的有向图。利用tarjan算法得到所有强连通分量,将这些强连通分量当作一个点,得到一个DAG。之后就可以求次数了。注意当强连通数量为1时,就代表着证明已经完成了。 代码: #include #incl

2014-09-28 09:46:36 879

原创 HDU5045-Contest(DP+状态压缩)

题目链接 题意:有n个人做m道题目,每个人对于每题都有答对的概率,求最后答出所有题目概率的最大值。有要求就是每两个人之间答题的数目不能超过1。 思路:DP+状态压缩。dp[i][j]表示前i道题目j个人答题状态的最大值,j用二进制表示,因为人最多就10个。因为每两个人之间答题数目不能超过1,所以当状态达到1 代码: #include #include #inc

2014-09-28 08:35:47 1140 2

原创 UVALive5135 - Mining Your Own Business(BCC)

题目链接 题意:n条隧道由一些点连接而成,其中每条隧道链接两个连接点。任意两个连接点之间最多只有一条隧道。任务就是在这些连接点中,安装尽量少的太平井和逃生装置,使得不管哪个连接点倒塌,工人都能从其他太平井逃脱,求最少安装数量和方案。 思路:其实本题就相当于在一张无向图中,涂尽量少的黑点,使得任意删除哪个点,每个连通分量至少有一个黑点。因为不同的连通分量最多只有一个公共点

2014-09-26 19:35:39 902

原创 UVALive3523-Knights of the Round Table(BCC+二分图判定)

题目链接 题意:有n个骑士经常举行圆桌会议,每次至少3人参加,且相互厌恶的其实不能坐在圆桌相邻的位置。如果发生意见分歧,则要举手表决,因此参加的骑士数目一定要为奇数。统计有多少人不能参加任何一个会议。 思路:这是大白上面的一道例题。我们可以先根据骑士之间的关系建立无向图G,则题目就转化为求不再任何一个简单奇圈上的结点个数。如果图G不连通,就分别对G的连通分量求解。简单圈上的

2014-09-26 17:06:49 921

原创 UVALive4255-Guess(拓扑排序)

题目链接 题意:对于一个序列a1,a2...an,我们可以计算出一个符号矩阵S,其中Sij为ai+..+aj的正负号。给出符号矩阵,要求输出一个对应的序列。 思路:使用连续和转化为前缀和之差的技巧,将前缀和当做一个顶点,那样就能确立边的关系,以及入度数,之后用拓扑排序求解,先着一个入度为0的顶点,删除其相关的边,循环操作。 代码: #include #includ

2014-09-26 09:03:22 1234

原创 UVA10047- The Monocycle(BFS)

题目链接 题意:一自行车的轮子被分成5个扇区,涂了5种不同颜色。自行车每1秒要么骑到下一个格子,要么左转或者右转90。。一开始自行车面向北,颜色为绿,到达目标格时,必须触底颜色为绿,但朝向无限制。求到达目标格的最短时间。 思路:判重数组多加两维,分别为朝向和颜色,之后就可以用BFS求最少时间了。 代码: #include #include #include #

2014-09-25 10:11:17 1191

原创 UVA11624-Fire!(两次bfs)

题目链接 题意:你的任务是帮助J走出一个大火蔓延的迷宫。J每分钟可以超上下左右四个方向移动,而所有着火的格子都会往四周蔓延。迷宫中有一些障碍,J和火都无法进入。当J走到一个迷宫的边界格子时,我们认为他已经走出了迷宫。 思路:这是大白上面的一道题目,其实只要将每个格子什么时间着火处理出来就可以了。两次BFS,第一次处理格子着火的时间,第二次BFS就是判断是否能在最短时间内走出

2014-09-24 22:51:47 1573

原创 HDU5040- Instrusive(BFS+记忆化搜索)

题目链接

2014-09-23 20:49:25 746

原创 HDU5033-Building(维护单调栈)

题目链接 题意:给出n座大楼的位置以及高度,再给出m个人的位置,查询给出的人的位置所能看到的最大的仰角是多少。 思路:维护每两座的楼之间的斜率,使之成为一个凸面,用栈来维护,听了GG小伙伴的思路,可以将人当作高度为0的大楼来带入计算。 代码: #include #include #include #include #include using names

2014-09-23 14:29:42 1404

原创 HDU5038-Grade

题目链接 题意:用给出的公式求出每个格子蘑菇的数值,求出现频率最多的数值,如果存在出现频率一样的话并且还存在其他频率,输出频率最多且一样的数值,按升序,但要注意有且出现只有一种数值时,输出这种数值。 思路:简单模拟 代码: #include #include #include #include #include #include using names

2014-09-21 21:09:33 1167

原创 HDU5025-Saving Tang Monk(BFS + 状态压缩)

题目链接 题意:给出n*n的网格,有且只有一个K(孙悟空)和一个T(唐僧),最多有m把钥匙,最多5条蛇,每走一格的时间为1,走到蛇的格子(杀蛇时间为1)的时间为2,取钥匙要按照顺序来,问能救到唐僧,如果可以输出最短时间。 思路:bfs求最小值。开四维数组作为标记,后两维分别为取到的钥匙数,以及蛇的状态。 代码: #include #include #includ

2014-09-20 19:54:55 1200

原创 UVA10312- Expression Bracketing(Catalan + 递推)

题目链接 题意:给出一个序列,长度为n,表示有n个x(节点),可以添加任意括号,问说形成的串为非二叉表达式的有多少个。 思路:用总数减去二叉表达式的数量。二叉表达式可以用Catalan数求解,至于总数的话,用dp求解。dp[i][0]表示在第i个位置可以被拆分成两个子树,dp[i][1]表示有一个子树。 代码: #include #include #includ

2014-09-18 10:59:51 967

原创 UVA580-Critical Mass

题目链接 题意:一个栈中只能放入U和L,问存在连续3个以上U(危险组合)的个数为几个 思路:用从的组合数-安全组合=危险组合。d[i]表示第i个位置以L结束的序列,所以就有d[i] = d[i - 1] + d[i - 2] + d[i - 3]。 代码: #include #include #include #include #include usin

2014-09-18 08:53:55 1954 1

原创 UVA10081-Tight Words(递推)

题目链接 题意:给出一个0到k的序列,要求出有每相邻的两个数之间的差不差过1的子序列的概率。 思路:递推,dp[i][j]表示长度为i并且j结尾的子序列的个数。注意,如果用符合子序列个数除以从个数,数组要用double,用long long的话会爆掉。 代码: #include #include #include #include #include us

2014-09-17 13:31:11 857

原创 10079 - Pizza Cutting

点击打开链接 题意:用n刀可以切出最多块的Pizza。 思路:线段相交越多,所分成的区域越多。每多一刀,就让这刀与之前的全部相交,即为最大值。最后有公式的:n * (n + 1) / 2 + 1 代码: #include #include #include #include #include using namespace std; typedef l

2014-09-17 11:07:29 1339

原创 UVA11038- How Many O's?(组合数学)

题目链接 题意:求出在a到b之间的数中,有多少个0。 思路:组合数学问题。可以枚举每个位置上的数i,假设i之前的数为left,后面的为right,后面有num位数。当i != 0时,将i置为0,所以组合数为left * 10^num(后面的位数,每一位有10种选择),当i = 0时,当前面取[1, left - 1]时,保证组合的数一定小于原来的数,所以后面的可以取10^n

2014-09-17 10:30:30 1070

原创 HDU5015-233 Matrix(矩阵快速幂)

题目链接 题意:给定一个矩阵的第0列的第1到n个数,第一行第1个数开始每个数分别为233, 2333........,求第n行的第m个数。 思路:将第一行的数全部右移一位,用前一列递推出下一列,构造矩阵,类似如下  1 0 0 0 0 0 0  1 10 0 0 0 0 0  0 1 1 0 0 0 0  0 1 1 1 0 0 0  0 1 1 1 1 0 0 

2014-09-16 22:50:06 1021

原创 1362 - Exploring Pyramids

#include #include #include #include using namespace std; typedef long long ll; const int MOD = 1000000000; const int MAXN = 305; char s[MAXN]; ll d[MAXN][MAXN]; ll dp(int i, int j) { if (

2014-09-15 20:26:02 847

原创 UVA1315 - Crazy tea party(推导)

题目链接 题意:n个人坐成环形,相邻的两个可以交换位置,求最少交换次数使得序列相反。 思路:类似与冒泡排序,可以将环形序列拆成两个序列,分别进行冒泡。当n为奇数时,分为n/2与n/2 + 1,所以ans = (n / 2) * (n / 2 - 1) / 2 + (n / 2) * (n / 2 + 1) / 2,当n为偶数时,分为两个n/2, 所以ans = (n / 2

2014-09-15 19:26:00 938

原创 UVA11461- Square Numbers

题目链接 题意:求a到b之间的平方数的数量 思路:暴力,水题 代码: #include #include #include #include #include using namespace std; const int MAXN = 100005; int vis[MAXN]; int judge(int n) { double a =

2014-09-15 16:59:39 1071

原创 UVA11489 - Integer Game(博弈)

题目链接 题意:有一连串的数字,两个人轮流取一个数,当谁取走数后,剩下的数的和不能被3整除,则这个人输了,求出先手是否能胜。 思路:当数只有一个时,先后必胜。当数大于两个时,先判断先手取完数后,剩下的数是否能被3整除,如果可以的话,接下去两个人轮流取的数都必须是3的整数倍。计算3的整数倍的个数就可以了。 代码: #include #include #includ

2014-09-15 16:38:24 1112

原创 HDU5001-Walk(记忆化搜索)

题目链接 题意:一张无向图,要你求出走d步之后,每个点无法到达的概率。 思路:记忆化搜索,枚举每个点a,dp[i][j]表示走了i步到达j点的概率(不包括a点),注意初始化清空。 代码: #include #include #include #include #include using namespace std; const int MAXN =

2014-09-15 15:33:37 1077

原创 HDU5011-Game(博弈)

题目链接 题意:取石子游戏,两个人轮流取石子,取石子有规则,要么那掉这堆石子,要么将这堆石子分成两堆,在加入原来的石堆当中,先手取完算胜利,否则失败。 思路:简单的Nim游戏,所有值异或为0时,先手失败。 代码: #include #include #include #include #include using namespace std; cons

2014-09-15 00:12:17 1388

原创 HDU5007-Post Robot

题目链接 题意:出现Apple、iPod、iPhone、iPad时输出MAI MAI MAI!,出现Sony,输出SONY DAFA IS GOOD! 思路:水题,直接暴力求解 代码: #include #include #include #include #include using namespace std; int main() { s

2014-09-14 23:14:13 2690

原创 HDU5012-Dice(BFS)

题目链接 题意:给你两个色子,如果可以通过旋转使两个色子的面一一对应相等(旋转规则题目给出),求最小步数,如果不行,输出-1。 思路:用BFS求最少步数。 代码: #include #include #include #include #include using namespace std; const int MAXN = 6; struct n

2014-09-14 22:38:56 1320 2

原创 UVA11752-The Super Powers(素数表+log)

题目链接 题意:如果有一个数至少是两个不同的正整数的幂,那么称它为超级幂。按照升序输出1~2^64-1之间的所有超级幂。 思路:n = a ^ i = b ^ j,那么就证明指数要为合数,所以只要找出64以内的所以合数,然后枚举在1 代码; #include #include #include #include #include using names

2014-09-13 10:35:12 1202

原创 HDU4994-Revenge of Nim(博弈)

题目链接 题意:有n堆石子,每个堆有Ai个石头,求先手是否能取得最后一个石头。 思路:这题主要在于前置1的多少能改变谁能成为先手,当前置1为偶数时,先手还是原来的先手,当为奇数时,先手就变成后手,后手变成先手。记得考虑当所有石堆都只有一个石头的情况。 代码: #include #include #include #include using namespa

2014-09-12 21:29:55 980

原创 UVA10780 - Again Prime? No Time.(分解质因子)

题目链接 题意:输入两个整数n和m,求最大的整数k使得m^k是n!的约数。 思路:m^k等于m的所有质因子的k次方的和,所以只要找到m中的质因子在n!中所能得到的最小的次方,就是k的值。 代码: #include #include #include #include #include using namespace std; const int INF

2014-09-12 15:39:51 1106

原创 UVA11609 - Teams(组合数学+快速幂)

题目链接 题意:从N个人中选出K个人为一只队伍(1 思路:依题目可得ans = sum(i * C(i, n)),化简可得ans = n * sum(C(i, n - 1)) = n * 2 ^ (n - 1)。之后用快速幂求解。 代码: #include #include #include #include #include typedef long

2014-09-11 20:57:54 986

原创 UVA10892 - LCM Cardinality(分解质因子)

题目链接 题意:输入正整数n,统计有多少对正整数a 思路:分解质因子,然后直接暴力求出对数 代码: #include #include #include #include #include using namespace std; typedef long long ll; const int MAXN = 1000; ll arr[MAXN];

2014-09-11 19:43:44 1053

原创 UVA10943- How do you add?(隔板法)

题目链接 题意:求由K个不大于N的非负整数组合而成N的方法数。 思路:隔板法。这个问题可以等价于有N个小球放入K个盒子中,盒子可以为空,问有几种放置的方法。但因为盒子为空,不符合隔板法,所以我们可以先往每个盒子里面放置一个小球,满足每个盒子都不为空的,等分完后,在每个盒子减去一个小球。所以就相当与将N + K - 1个小球分为K - 1份。之后就是组合数学的问题了。

2014-09-10 11:11:33 1086

原创 ZOJ3818-Pretty Poem(暴力枚举)

题目链接

2014-09-07 21:21:05 1283

原创 UVA11889 - Benefit

题目链接 题意:输入两个整数A和C,求最小的整数B使得lcm(A, B) = C,如果无解,输出“NO SULUTION”。 思路:lcm(A, B) * gcd(A, B) = A * B转化为C / A = B / gcd(A, B),所以可以枚举B的倍数。 代码: #include #include #include #include using n

2014-09-06 18:05:04 992

原创 UVA11388-GCD LCM

题目链接 题意:给你两个数G和L,输出两个正整数,最大公约数为G,最小公倍数为L,输出a最小的情况,如果不存在输出-1。 思路:当a最小时,a = G,所以只要L % G == 0,就表示存在。 代码: #include #include #include #include using namespace std; int g, l; int main

2014-09-06 17:00:47 718

原创 UVA11806-Cheerleaders(容斥原理+二进制)

题目链接 题意:在一个m*n的矩形网格里放k个相同的石子,问有多少种方法?每个格子最多放一个石子,所有石子都要放完,并且第一行、最后一行、第一列、最后一列都得有石子。 思路:假设满足第一行没有石子的方案集为A,最后一行没有石子的方案集为B,第一列没有石子的方案集为C,最后一列没有石子的方案集为D,全集为S,则所求答案就是“在S中但不在A,B,C,D任何一个集合中”的元素个数

2014-09-06 15:50:37 917

原创 HDU4565-So Easy!(共轭运用+矩阵快速幂)

题目链接 题意:  求解  思路: 记(a+b√)n为An,配项 Cn=An+Bn=(a+b√)n+(a−b√)n 两项恰好共轭,所以Cn是整数。又根据限制条件 (a−1)2ba2⇒0a−b√1⇒0(a−b√)n1⇒Bn1 也就是说Cn=⌈An⌉ Sn=(Cn)%m 求Cn的方法是递推。 对Cn乘以(a+b√)+(a−b√) 于

2014-09-05 19:00:13 985

原创 HDU4965-Fast Matrix Calculation(矩阵快速幂)

题目链接 题意:n*k的矩阵A和一个k*n的矩阵B,C = A * B。求M = (C)^(n * n)时,矩阵M中每个元素的和(每个元素都要MOD6) 思路:因为n最大到1000,所以不能直接用矩阵快速幂求AB的n*n次幂,但是可以将公式稍微转换下,M = AB * AB...* AB = A * (BA) *... * (BA) * B,这样BA的n*n -1次幂就能用

2014-09-05 14:55:23 754

空空如也

空空如也

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

TA关注的人

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