自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

懒人一枚。

好好努力吧,少年。

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

原创 HDU2256-Problem of Precision(矩阵构造+快速幂)

题目链接 题意:求sqrt(sqrt(2) + sqrt(3)) ^ 2n MOD 1024 思路: 代码: #include #include #include #include #include using namespace std; const int MOD = 1024; int n; struct mat { i

2014-08-31 23:31:52 823

原创 HDU3117-Fibonacci Numbers(矩阵快速幂+log)

题目链接 题意:斐波那契数列,当长度大于8时,要输出前四位和后四位 思路:后四位很简单,矩阵快速幂取模,难度在于前四位的求解。  已知斐波那契数列的通项公式:f(n) = (1 / sqrt(5)) * (((1 + sqrt(5)) / 2) ^ n - ((1 + sqrt(5)) / 2) ^ n),当n >= 40时((1 + sqrt(5)) / 2) ^ n近

2014-08-30 14:26:48 1379

原创 HDU1757-A Simple Math Problem(矩阵快速幂)

题目链接 题意:求出f(k) % m 思路:f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10),所以可以得到一个矩阵  (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)  (1, 0, 0, 0, 0, 0, 0, 0, 0, 0)  (0, 1, 0,

2014-08-30 11:24:03 944

原创 HDU1575-Tr A(矩阵快速幂)

题目链接 题意:A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。 思路:简单的矩阵快速幂 代码: #include #include #include #include #include using namespace std; //typedef long long ll; typedef __int

2014-08-29 23:47:30 1645

原创 HDU1061-Rightmost Digit(快速幂取模)

题目链接 题意:求n^n的个位数的值。 思路:快速幂求值 代码: #include #include #include #include #include using namespace std; typedef long long ll; ll a, b, n, m; struct mat{ ll s[2][2]; mat() {

2014-08-29 22:28:56 837

原创 FZU1911-Construct a Matrix(矩阵快速幂+规律)

题目链接

2014-08-29 15:42:29 898

原创 UVA10518 - How Many Calls?(矩阵快速幂)

题目链接 题意:求第n个斐波那契数的递归次数MOD b 思路:用矩阵快速幂求斐波那契数列,然后打表找出递归次数的规律为f(n) = 2 * F(n) - 1(F(n)为斐波那契数)。 代码: #include #include #include #include #include typedef long long ll; using namespace

2014-08-28 20:34:37 928

原创 UVA10299- Modular Fibonacci(斐波那契数列+矩阵快速幂)

题目链接 题意:给出n和m,求出f(n) % m, f(x)为斐波那契数列。 思路:因为n挺大的,如果直接利用公式计算很有可能会TLE,所以利用矩阵快速幂求解,|(1, 1), (1, 0)| * |f(n - 1), f(n - 2)| = |f(n), f(n - 1)|,所以求f(n)相当于|f(1), f(0)|乘上n - 1次的|(1, 1), (1, 0)|。

2014-08-28 16:37:52 1150

原创 HDU4968-Improving the GPA

题目链接 题意:每个成绩范围对应一个绩点,给出平均分avg,课程数n,求能得到的平均绩点的最大值和最小值。 思路:先预处理出每个成绩所对应的绩点,然后递推出所有情况,d[i][k]表示i个人有k分的绩点总数,所以可以得到动态转移方程。  当求最大值时d[i][k] = max(d[i][k], d[i - 1][k - j] + gpa[j])(j表示课程分数)  当求

2014-08-19 21:13:34 809

原创 HDU4970-Killing Monsters

题目链接 题意:塔防游戏,长为n的一条路上建造m个箭塔,每个箭塔攻击范围为[l, r],每格造成伤害为d,再给出k只怪兽的血量h,出现位置x,怪兽向前走,问最后还有几只怪兽存活。 思路:先求出每个格子造成的伤害,开一个stack数组,stack[l] += d,stack[r + 1] -= d,然后从前往后扫描一次,这样就可以得到每个格子造成的伤害;然后求出第1格到第i格

2014-08-19 20:04:49 641

原创 HDU4961-Boring Sum(质因子)

点击打开链接 题意:给出n个数的数列a,bi的取值为在1 思路:如果直接暴力的话一定会超时,所以我们可以开一个vis数组来记录每一个值所对应的最大的下标是多少。即每查找ai,分解出ai的质因子,更新vis数组。 代码: #include #include #include #include #include using namespace std;

2014-08-19 19:20:26 725

原创 10624 - Super Number

题目链接 题意:给出n到m的范围,求出一个数在前i位数组成的数字能被i整除,如果存在输出这个数,如果不存在,输出-1. 思路:回溯,每次放第i位,然后判断是否符合题意。这题踩着时间过去的2.6s(看了下别人的题解,可以减少取模次数来节省时间)。 代码: #include #include #include #include using namespace

2014-08-18 21:37:07 859

原创 UVA10483 - The Sum Equals the Product(枚举)

题目链接 题意:在实数a,b之间找到一个数c(最多到小数点的后两位),找出存在c = x + y + z = x * y * z,按字典序输出。 思路:先将数都扩大100倍,方便计算。但直接枚举所有情况的话会TLE,所以我们要缩小枚举范围。先枚举x,因为x,y,z要按照非递减顺序,所以x * x * x必须要小于c * 10000,再枚举y,同理可的x * y * y也必须

2014-08-18 20:20:53 709

原创 UVA10120 - Gift?!

题目链接 题意:有n个石头,编号从1到n,礼物藏在编号为m的石头上,第i次跳2*1-1格,可以向前跳也可以向后跳,问是否能拿到礼物。 思路:简单的DFS。重点是有规律,就是n>=50时,不管m为何值,都是可以抵达m石头,所以只要搜索50以下就可以了。 代码: #include #include #include #include using namespa

2014-08-18 16:39:10 754

原创 UVA11127- Triple-Free Binary Strings(DFS+位运算)

题目链接 题意:给出长度为n的字符串,字符串由‘1’,‘0’,‘’组成,其中‘’可以任意替换为‘1’,‘0’,求不存在连续3个相同子串的字符串的最多个数。 思路:我们可以利用二进制的形式来表示字符串,进行DFS。利用位运算的左移来表示在‘*’位置上放置‘1’,注意在递归的过程中注意判断之否存在3个连续相同的子串。 代码: #include #include #i

2014-08-18 14:58:22 805

原创 UVA11714 - Blind Sorting(推理)

题目链接 题意:给出n个数,求出得到最大数和第二大数所用的最多的比较次数 思路:可以取两个数两两做比较,就相当与建立二叉树,两个数的最大值就相当与两个的父节点,所以我们我们可以知道得到最大值时的比较次数为n-1,然后假设所有左儿子都大于右儿子,所以最大值的右儿子还有跟左子树中的值做比较得到第二大数,比较的个数为树高。 代码: #include #include

2014-08-17 21:27:35 796

原创 UVA1374 - Power Calculus(迭代深搜+剪枝)

题目链接 题意:给出x和正整数n,问最少需要几次乘除法 可以得到n = x^m 思路:其实是关于指数的操作,即从1到m最少的步数。我们可以先确定最少步数m,然后进行迭代,迭代的过程也就是判断通过相加减所得到的数可以在m次操作中等于n,如果可以的话,m即为最小步数,如果不行的话,m++,进行下一次迭代。 代码: #include #include #include

2014-08-17 19:56:17 1272

原创 UVA1420 - Priest John's Busiest Day

题目链接 题意:牧师John能否安排到所有婚礼,使其为所有婚礼送上祝福(祝福时间大于婚礼从时间的一半)。 思路:贪心,按照婚礼中间时间从小到大排序,尽量早结束婚礼祝福时间最晚开始(每个婚礼都有一个祝福时间最晚开始的时间)比较早的婚礼。 代码: #include #include #include #include using namespace std;

2014-08-17 16:32:18 837

原创 1419 - Ugly Windows(暴力枚举)

题目链接 题意:在一个界面上有多个窗口,求没有被其他窗口覆盖的窗口的个数。 思路:直接暴力枚举每个窗口的长和宽,以确定右下角是否与左上角相同,如果相同再判断矩形内部有没有被其他窗口覆盖到,注意边界覆盖也是算被覆盖到。 代码: #include #include #include #include using namespace std; const in

2014-08-17 14:25:13 895

原创 UVA654- Ratio(暴力枚举)

题目链接 题意:给出两个数n,m,求分母从1-m越来越接近n/m的序列 思路:从1-m枚举分母i,然后维护一个值,使序列越来越靠近n/m。分子j的话,j/i趋近于n/m时,可以得到(int)j=i*n/m+0.5。 代码: #include #include #include #include #include using namespace std;

2014-08-16 20:00:08 748

原创 UVA10827 - Maximum sum on a torus

题目链接 题意:给出一个环形矩阵,也就是第一行和最后一行是相连的,第一列和最后一列是相连的,求最大的子矩阵的和 思路:只要将矩阵复制四个,那么就可以按照求一个矩阵内最大子矩阵之和的做法去做,即枚举所有子矩阵的和,更新最大值。要注意在转换后的大矩阵,枚举的子矩阵规格是有范围的。 代码: #include #include #include #include

2014-08-16 17:47:41 869

原创 UVA585- Triangles(暴力枚举)

题目链接 题意:找出所给图形中,没有被染色的最大的三角形的面积。 思路:仔细观察图形可以发现大三角形的形成是已一个未染色小三角形为基础,然后一层一层往上叠加(如果整层没被染色)。从上往下看图形不难发现,如果小三角形的底边朝上,叠加是向上形成的,底边朝下,叠加是向下形成的。所以我们可以枚举每一个没有被染色的小三角,更新能叠加的最大的层数,也就能得到最大三角形的面积。

2014-08-16 15:48:26 874

原创 UVA529- Addition Chains(迭代+DFS)

题目链接 题意:给一个数n,要你找出一个以n为结尾的序列,使得这个序列中的任意一个数(1除外),能由序列中的两个数(可以相同)相加得到。求最短的序列,如有多种组合,任意输出一个。 思路:要迭代+DFS,首先我们可以得到要使序列尽量短的话,那么n最好是能由n/2相加得到,所以我们就可以得到最小深度depth,以depth为基础,进行深搜,如果满足的话就输出,如果不符合的话,再

2014-08-16 12:45:30 915

原创 UVA110- Meta-Loopless Sorts(模拟全排列)

题目链接 题意:给你n个数,要求按照题目所给的规则大小排序,输出所有可能的结果。 思路:其实求出来的所有序列是n个数的全排列,那么难点在于怎么按照题目所给的格式输出。我们可以看出其实是在已知的序列上插空,所以就可以使用回溯来插入元素,这里可以使用vector,方便元素的插入。 #include #include #include #include #include

2014-08-15 20:49:29 836

原创 UVA10317- Equating Equations(回溯+剪枝)

题目链接 题意:给出一个式子,但这个式子不一定是等式,在‘+’,‘-’符号位置不变的情况下,重新排列数字的位置,使其成为等式,如果可以的话,输出其中一种排列方式。 思路:我们将等号右边的数全部移动到等号右边,例如a+b-c=d-e,移动后变成a+b+e-(c+d)=0,也就是a+b+e=c+d,所以当式子可以变化成等式时,所有数的和必然是偶数。那么问题可以转化为在n个数中找

2014-08-15 16:58:42 968 2

原创 UVA812-Trade on Verweggistan(暴力)

题目链接 题意:商人要去买pruls这种东西。然后它的价值是一个序列,买的时候要严格从头到尾取,比如你要买第5个,那么前4个也要一起买下来,求商人能获得的最大的利润。 思路:最大利润肯定就是每个序列的最大值的和。对于输出的话,我们记录下每行能取得最大值的位置,然后回溯去计算所有可能值,然后输出前10个最小的值。 #include #include #include

2014-08-14 21:43:14 795

原创 HDU4952-Number Transformation

题目链接

2014-08-14 19:40:35 681

原创 HDU4950-Monster

点击打开链接

2014-08-14 19:21:02 631

原创 UVA434 - Matty's Blocks

题目链接 题意:给出n,代表所要用积木搭建的整体的底面积的边长,然后分别给出正视图和右视图,要你求出搭建都要形状的最小木块数量和最小木块数量和最大木块数量的差值。 思路:其实题目就是要你求出最小木块数和最大木块数,我们可以分开求解。  首先对于最小木块数,要想用最少的立方体搭建,那就意味着正视图中的每一竖立方体的高度最好都要被右视图中的高度所利用到。所以我们以正视图为基准

2014-08-13 23:04:48 759

原创 UVA1555-- Garland(推导+二分)

题目链接 题意:有n个灯,给定第一盏灯A的高度,接下去每盏灯的高度按照公式计算,求使所有灯都不会落在地上(允许碰触)的B的最低高度。 思路:根据题目所给公式 Hi=(Hj+1+Hj−1)/2−1,转化为Hi+1=2∗Hi−Hi−1+2,当我们已知H1时,我们就可以二分枚举H2,求出符合题意的最小的B #include #include #includ

2014-08-13 20:10:15 800

原创 UVA1523-Helicopter(暴力+全排列)

题目链接 题意:有八个乘客坐在直升机上,求重心M最小值。 思路:根据题目所给的公式,我们可以知道要使得M最小,也就是要使得Mv和Mh的和最小,我们可以使用全排列,分别将每个值放在各个位子上,然后更新最小值。 #include #include #include #include #include using namespace std; const int

2014-08-13 17:59:42 1025

原创 UVA1153-Keep the Customer Satisfied(贪心+优先队列)

题目链接 题意:有一家大型的钢铁厂,每月初都收到大量客户的订单,订单包括定制的钢铁的数量q,以及交货的截止时间d。每个单位时间只能完成一个订单的工作,不能同时进行多个,要求怎么安排使得接受的订单最多。 思路:要使得订单最多,首先我们先按照截止日期,从小到大排序。  当qi>qj 并且 didj时,那么我们应该优先选择订单j才能使结果最优,所以我们使用优先队列来维护q值。

2014-08-13 15:39:44 1651

原创 HDU4944-FSF’s game(递推)

题目链接 题意:给定一个整数n,求∑f(i, j)(1 思路:依题意,我们可以得到一个递推式ans[n] = ans[n - 1] + ∑f(n, j)(1 对于∑f(n, j)而言,我们用aj(1 <= j <= n)表示gcd(n/k, j/k)所能取到的值的集合,那么可以得到∑f(n, j) = (n * 1 / a1 + n * 2 / a2 + ... +

2014-08-12 21:23:22 955

原创 UVA1316- Supermarket

点击打开链接 题意:有N个物品,每个物品在都有一个截止日期,如果在截止日期之前(包括截止日期)卖出将会获得相应的利润,卖出物品需要一个单位时间,问最多能获得多少利润? 思路:将利润从大到小排序,尽量在该物单位时间出售利润大的物品,这样就能使得从利润达到最大。 #include #include #include #include using namespace

2014-08-12 11:29:01 826

原创 UVA11387 - The 3-Regular Graph(推理)

题目链接 题意:给n个点,问是否能画出一个无向图,且每个顶点连接3条边,如果可以的话输出连接的边。 思路:当增加一条边时,总的无向图的度数会增加2,所以度数之和n*2为偶数。当n为奇数时,度数之和为奇数,所以不存在。当n为偶数时才符合条件。注意特判n为2时的情况。输出的话,就头尾相连,然后i与i+(n/2)相连。 #include #include #include

2014-08-12 09:50:44 839

原创 UVA471- Magic Numbers

题目链接 题意:s1/s2=N,s1、s2、N都是各个位数上数字不相同的整数。给定N,求有多少个这样的式子并输出。 思路:其实最大的数只能是9876543210,所以我们只要暴力枚举,枚举过程中判断s1、s2是否符合题目要求。 #include #include #include #include #include using namespace std;

2014-08-11 20:55:36 703

原创 UVA524- Prime Ring Problem

题目链接 题意:给出整数n,输出所有素数环 思路:回溯求解,注意输出时,每两组之间输出一个空行 #include #include #include #include using namespace std; const int MAXN = 105; int n; int arr[MAXN], prime[MAXN], vis[MAXN]; int i

2014-08-11 19:26:04 703

原创 UVA1467 - Installations

题目链接 题意:有n个服务,每个服务都有安装时间s,截止时间d。如果任务没有在截止时间之前完成,会有惩罚值,假设完成时间为C,则惩罚值为max(C-d,0)。求最两个最大惩罚值之和的最小值。 思路:我们先按照截止时间d从小到大排序,如果d相同,则s小的排前面。这样处理得到的总的惩罚值是较优解,但不是最优解。排序之后,找到序列中惩罚值最大值和第二大值的两者中比较靠后的位置p,

2014-08-11 18:31:04 775

原创 UVA1445-Cubist Artwork

题目链接 题意:用一些等大的立方体搭积木,每个立方体或者直接放在地面的网格上,或者放在另一个立方体的上面,给出正视图和侧视图,求出最少用多少个立方体搭建。 思路:要想用最少的立方体搭建,那就意味着正面所看到的每一竖立方体的高度wh最好都要被侧面看到的高度dh所利用到。所以我们以正面为基准,正面需要的立方体总数加上侧面存在dh无法利用正面wh的数量,就是最少需要的立方体数。

2014-08-11 14:09:00 1157

原创 UVA1418-WonderTeam(推理+贪心)

题目链接 题意:有n支队伍比赛,每两支队伍打两场(主客场各一次),胜得3分,输不得分,平得1分。比赛结束之后会评选出一个梦之队,它满足如下条件:进球总数最多(不能并列),胜利场数最多(不能并列),丢球总数最少(不能并列)。求梦之队的最低可能排名。一支得分为p的球队的排名等于等分严格大于p的球队的个数加1. 思路:其实3个限定条件只有胜利场数最多有用,因为梦之队可以在胜利场次

2014-08-11 10:56:40 1019

空空如也

空空如也

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

TA关注的人

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