![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛-第十章
文章平均质量分 62
JeraKrs
本人目前就职于百度商业研发部,有需要内推的朋友简历可发我邮箱 jerakrs@qq.com
展开
-
uva 10673 - Play with Floor and Ceil(欧几里得算法)
题目链接:uva 10673 - Play with Floor and Ceil题目大意:给出x 和k,求解p和q使得等式x = p[x / k] + q [ x / k], 两个[x / k]分别为向下取整和向上取整。解题思路:欧几里得算法求解二元一次方程的解。#include #include void gcd(long long a, long原创 2013-10-21 21:56:56 · 1413 阅读 · 0 评论 -
uva 10205 - Stack 'em Up(模拟)
题目链接:uva 10205 - Stack 'em Up题目大意:比较长,很多人卡在题意上面,介绍篇翻译点击打开链接。解题思路:就是简单的模拟,然后对应的i位置要放dir[num][i]位置上的牌。#include #include const int MAXN = 105;const int N = 52;const char value[][原创 2013-11-10 11:11:38 · 1914 阅读 · 0 评论 -
uva 10023 - Square root(手动开方)
题目链接:uva 10023 - Square root题目大意:给出一个出,然后你求他的开方,这个数最大为10^1000。解题思路:手动开方的算法很容易就在网上找到了,但是10^1000次方明显的用到高精度,而开方的算法又用到加减乘除。。。所以就是坑,写了一整天,就当是复习大数好了。开方算法#include #include #原创 2013-11-09 20:47:46 · 1934 阅读 · 0 评论 -
uva 10157 - Expressions(dp)
题目链接:uva 10157 - Expressions题目大意:给出n和d,表示说有n/2对括号,要求组成深度为d的表达式,问有多少种。解题思路:一开始想说,每增加一对括号无非是加在最前面和最后面,要不一前一后,然后就有了dp[i][j] = dp[i - 1][j] * 2 + dp[i - 1][j - 1].结果WA了。反思一下,考虑的不周全,以为括号放中间也是可以原创 2013-11-06 17:03:30 · 1539 阅读 · 0 评论 -
uva 10128 - Queue(dp)
题目链接:uva 10128 - Queue题目大意:给出n,p和r,表示有n个长短不一的人排队,从前面看可以看到p个人,从后面看可以看到r个人,问这种队列有多少种。解题思路:这题前几天看到的,当时一直想这说每次加入一个最高的,结果发现加进的最高个站哪里都是问题,然后今天灵光一闪,想到可以每次加入最矮的,这样他站在最前面的话,p就加1(挡不住任何人);站在队末尾的话,r就加原创 2013-11-06 16:54:05 · 1462 阅读 · 0 评论 -
uva 10081 - Tight Words(dp)
题目链接:uva 10081 - Tight Words题目大意:给出k和n,表示可以用0~k之间的数值来组成长度为n的数组,然后数组中有一种较为特殊的情况,即任意两个相邻的数值的差不超过1,计算这种特殊的数组占总数的百分比。解题思路:p[i][j]表示说长度为i,且最后一个数字为j的数字占长度为i的数组的百分比。#include #include i原创 2013-11-06 16:45:16 · 1464 阅读 · 0 评论 -
uva 10616 - Divisible Group Sums(计数)
题目链接:uva 10616 - Divisible Group Sums题目大意:给出n和q,表示有n个数字,q次询问,然后给出n个数字,q次询问,每次询问有两个数值,D和N,计算出n个数字中选出N个数字的和能整除D的方案有多少种。解题思路:因为(a + b)% D = (a%D+b%D)%D,所以可以将所有的数字全先模掉D,这样计算量会比较少,然后利用dp中背包的思想,原创 2013-11-05 21:21:23 · 2063 阅读 · 0 评论 -
uva 10912 - Simple Minded Hashing(计数)
题目链接:uva 10912 - Simple Minded Hashing题目大意:给出l和s,表示说用l个字母,组成一个字符串,字符串的权值和要刚好等于s,并且字母要升序排列,不可以重复使用,问有多少种组成。解题思路:简单dp,三维数组dp[i][j][k]表示说i个字符,最后一个字符为j(即为最大字符为j),quan原创 2013-11-05 21:15:04 · 2099 阅读 · 0 评论 -
uva 10247 - Complete Tree Labeling(dp)
题目链接:uva 10247 - Complete Tree Labeling题目大意:给出k和d,表示有一个k叉d层的完全k叉数,然后它的节点数为n个,用1~n给这棵树德节点标号,要求说任意一个节点的值不能大于它的任意一个子节点,每个数只能用一次。问优多少种标记的方法。解题思路:一般dp都是有dp[i - 1]推导出dp[i]的,这题也不例外,只不过思路和往常不太一样。节原创 2013-11-17 00:21:49 · 3331 阅读 · 0 评论 -
uva 10328 - Coin Toss(计数问题)
题目链接:uva 10328 - Coin Toss题目大意:给出n,表示有投掷n次硬币,硬币有分正反面,玩游戏的人比较迷信,如果他选择正面获胜的话,第二次他还是会选正面(不知道这句话要说什么,应该是背景),然后给出k,问说出现连续正面的此处大于 等于k的情况有多少种,比如说:3 2,投掷3次或有8中情况,满足说有两个以上连续的'H'(正面)的情况只有“HHH”, “HHT”, “TH原创 2013-11-04 19:01:15 · 4721 阅读 · 1 评论 -
uva 10308 - Roads in the North(dfs)
题目链接:uva 10308 - Roads in the North题目大意:给出一个无环无向图,求任意两点间的最大距离。输入空行问该组测试输入结束。解题思路:输入比较恶心,因为这个WA了一次,这题可以用dfs去做,任意选一个节点作为根节点,然后遍历与它相连的所有点,维护最大值就可以了,因为任意两点可以看成是以父亲节点而相连的。#include #inc原创 2013-11-04 20:50:13 · 1598 阅读 · 0 评论 -
uva 10236 - The Fibonacci Primes
题目连接:uva 10236 - The Fibonacci Primes题目大意:在给出n,输出第n个为素数的斐波那契数,取数值的前9位数。解题思路:原本想用打表的方式遍历斐波那契数,然后存在数组了,但是这样判断素数的函数就比较难写,要写成大数,后来看到一条定律,f[n],如果n为素数,那么f[n]也为素数,所以只要照出素数然后访问斐波那契数列的下标就可以了。原创 2013-11-03 19:44:32 · 1500 阅读 · 0 评论 -
uva 10519 - !! Really Strange !!(规律)
题目链接:uva 10519 - !! Really Strange !!题目大意:给出n,问用n个圆最多能将平面分割成几份。解题思路:公式c[i] = i * i - i + 2,首先可以分析出c[i] = c[i - 1] + 2 * i - 2, 然后带入c[i - 1] = c[i - 2] + 2 * (i - 1) - 2,重复带入可得c[i] = c[1]原创 2013-11-02 17:26:56 · 1296 阅读 · 0 评论 -
uva 10359 - Tiling(规律)
题目链接:uva 10359 - Tiling题目大意:有两种瓷砖1*2和2*2的若干个(无限),给出n,问有多少种方法将2*n的面积铺满。解题思路:cnt[i] = cnt[i - 1] + 2 * cnt[i - 2], 大数。#include #include #define ll long long#define max(a, b) (a)>(原创 2013-11-01 16:54:43 · 1740 阅读 · 0 评论 -
uva 11027 - Palindromic Permutation(组合数)
题目链接:uva 11027 - Palindromic Permutation题目大意:给出字符串,以及n,然后字符串中的字母排序可以组成若干的字符串,有些为回文串,输出第n个回文串,若不存在第n个回文串,输出“XXX”。解题思路:以为n非常大,所以用枚举是由点不太现实的,对于一个字符串,若能重排成回文串,说明每个字母出现的次数都为偶数,或者说为奇数的只有一个(可以放在中原创 2013-11-10 11:25:48 · 1367 阅读 · 0 评论 -
uva 11125 - Arrange Some Marbles(记忆化搜索)
题目链接:uva 11125 - Arrange Some Marbles题目大意:给出n表示有n种颜色的大理石,然后a1~an,表示各种颜色的大理石有多少个,然后现在要将大理石排成一排,颜色相同的的为一组,相邻的两组颜色和大小不能相同,而且头尾两组的大小和颜色也不能相同,问说有多少排列的方式。解题思路:一开始被题意搞蒙了,其实记忆化搜索就可以了,开一个5维数组,rec[b原创 2013-11-14 20:19:33 · 1192 阅读 · 0 评论 -
uva 10254 - The Priest Mathematician(dp)
题目链接:uva 10254 - The Priest Mathematician题目大意:四根柱子的汉诺塔问题,问说移动的最少次数。解题思路:一开始想着说用两个大数数组f[N], b[N], 然后一定存在一个值k,使得f[i] = f[k] * 2 + b[i - k]最小,然后b[i] = b[i - 1] * 2+ 1,但是这样枚举k的计算量非常大。然后参考别人打原创 2013-11-07 21:21:40 · 1598 阅读 · 0 评论 -
uva 306 - Cipher(周期)
题目链接:uva 306 - Cipher题目大意:给出n,以及a1 ~ an, 然后给出k,若k不为0的话,会有一个字符串,按照给出的a方式编码k次,输出所得字符串。解题思路:这题和我刚做的一题有点像,uva 10205 - Stack 'em Up,不过那道题是用模拟的方式,这题刚开始用了模拟,结果超时了,后来想到说,因为a1 ~ an为不等的1~n,所以一定存在一个周原创 2013-11-10 16:38:19 · 2183 阅读 · 0 评论 -
uva 557 - Burger(概率)
题目链接:uva 557 - Burger题目大意:Ben和Bill是一对双胞胎,生日那天他们请了2n个朋友(包括他们自己,题目给出的即为2n),然后有n个汉堡和n个三明治,然后由Ben的左边开始分食物,每个人选取食物的方式是先丢硬币,正面汉堡,反面是三明治,问最后双胞胎兄弟那道同一种食物的概率。解题思路:题目可以递推兄弟两拿到不同的食物的概率,然后用1-p就是所要的答案。原创 2013-11-03 15:10:21 · 2905 阅读 · 0 评论 -
uva 11181 - Probability|Given(概率)
题目链接:uva 11181 - Probability|Given题目大意:有n个人去超市买东西,给出r,每个人买东西的概率是p[i],当有r个人买东西的时候,第i个人恰好买东西的概率。解题思路:dfs思路很简单,主要注意说ans[i] / P, (P为n个人中买东西的人数为r的事件发生的概率)。#include #include const int原创 2013-10-31 08:39:11 · 1887 阅读 · 0 评论 -
uva 542 - France '98(概率)
题目链接:uva 542 - France '98题目大意:有16支球队比赛,给出16支球队的名称,然后给出16*16的表格,g[i][j] 表示i队胜j队的概率,问说16支球队获得总冠军的概率。解题思路:模拟比赛的过程,将队伍分组,每次和组内的其他队伍决胜负,概率之和即为出现的概率,只要处理好下标就可以了。#include #include #incl原创 2013-10-29 20:54:02 · 1698 阅读 · 0 评论 -
uva 11176 - Winning Streak(期望)
题目链接:uva 11176 - Winning Streak题目大意:给出n和p,有n场比赛,获胜的概率为p,问说连续获胜的期望值是多少。解题思路:昨天刚做了一道连续获胜的题目uva 10328 - Coin Toss,这不过这道题目始求期望,不过可以通过那道题目的思路求出概率,然后求期望就好求多了,dp[i][j]表示说在前i场比赛中,连续获胜的次数不超过j次,本题要结原创 2013-11-05 21:08:55 · 1647 阅读 · 0 评论 -
uva 10417 Gift Exchanging(概率 + dfs)
题目连接:uva 10417 Gift Exchanging题目大意:有个2B过生日,请了n个朋友,每个朋友都会带一个礼物,礼物都是有装的,但是包装只有5种,然后现在给出c1 ~c5,表示说现在桌子上出现各种包装的礼物各有多少个,然后告诉你每个人会带来5种包装的概率(和为1),第一个人是2B最好的朋友,2B想随即抽取一个,请问他应该拿哪一种包装的最好,即拿到最好朋友送得礼物的概率最大,原创 2013-11-17 00:10:06 · 2990 阅读 · 0 评论 -
uva 10491 - Cows and Cars(概率)
题目连接:uva 10491 - Cows and Cars题目大意:给出a,b和c,表示有a + b 个门, a个后面是牛, b个后面是车, 然后你从中选一个门,之后有一个知情人帮你打开c个后面是牛的门(因为1≤c解题思路:问题可以分成两种情况:1)第一次选中牛的时候,a/(a + b), 然后打开c个后面是牛的门,总关门数为(a + b - c - 1),然后还有原创 2013-10-28 19:44:36 · 1454 阅读 · 0 评论 -
uva 10900 - So you want to be a 2n-aire?(期望)
题目链接;uva 10900 - So you want to be a 2n-aire?题目大意:一个答题赢奖金的问题,玩家初始的金额为1,给出n,表示有n道题目,t表示说答对一道题目的概率在t到1之间,每次面对一道题,可以选择结束游戏,获得当前奖金;回答下一道问题,答对的概率p在t到1之间,答对的话奖金翻倍,答错的话结束游戏,没有奖金,求玩家赢的奖金的期望值的最大值。解原创 2013-11-04 21:06:12 · 2115 阅读 · 0 评论 -
uva 10943 - How do you add?(dp)
题目连接:uva 10943 - How do you add?题目大意:给出n和k,用k个数组成加法算式,使得最后的和为n,求有多少种组合方式。解题思路:一开始不知道0也算,即比如说 1 100, 可以使0 + 0 + 1,所以说答案是100。num[i][j] = ∑ num[k][j - 1](0 ≤ k ≤ i)。#include #includ原创 2013-10-20 11:04:03 · 1392 阅读 · 1 评论 -
uva 10791 - Minimum Sum LCM(分解因子)
题目大意:uva 10791 - Minimum Sum LCM题目大意:给出一个n,将n分解成n = p1 ^ k1 * p2 ^ k2 * ... * pm ^ km,然后求解sum = ∑(1≤i≤m)pi ^ ki.解题思路:比较费解的是n本身就是素数,那么n应该分解成n^ 1 + 1 ^ 1,所以sum= n + 1,还有一种就是n = p ^ k,sum = p原创 2013-10-24 08:41:54 · 1960 阅读 · 0 评论 -
uva 10570 - Meeting with Aliens
题目链接:uva 10570 - Meeting with Aliens题目大意:有n个外星人,然后给出他们的序号,问说最少交换几次使得n个外星人形成有序的序列。解题思路:参考别人的思路,每次交换位置1和1的,然后位置2和2.....这样交换的次数最少。#include #include #define min(a,b) (a)<(b)?(a):(b)原创 2013-11-07 21:10:47 · 1389 阅读 · 0 评论 -
uva 11029 - Leading and Trailing(快速幂)
题目链接:uva 11029 - Leading and Trailing题目大意:给出一个n和k求n^k的前三位数和后三位数。解题思路:后三为数可以用分治的方法(快速幂)去做,可是前三位数就比较麻烦了,看了别人的题解.n^k = 10 ^ (k * log10(n)),所以可以将多余的位数移到小数点后面然后舍弃掉,只保留前三位,pow(10, 2 + fmod(k *原创 2013-10-26 08:02:43 · 1817 阅读 · 0 评论 -
uva 254 - Towers of Hanoi(递归)
题目链接:uva 254 - Towers of Hanoi题目大意:给出n和k,n的范围为0~100, k的范围为0~2^n - 1, 然后模拟汉诺塔游戏移动n个碟子,按照最优的游戏策略,移动了k次后,三个柱子上各有多少个碟子。注意:如果盘子的总数为奇数,那么移动的目标最终目标位B号柱,否则为C号柱(题目要按照某种序列移动碟子)。解题思路:递归的思想,每次处理原创 2013-11-11 20:34:52 · 1836 阅读 · 0 评论 -
uva 10910 - Marks Distribution(dp)
题目链接:uva 10910 - Marks Distribution题目大意:给出n,t和p,表示有n个科目,然后某人得了t分,然后每个科目的及格分数为p, 他全部及格了(即每科分数都在p以上),问说他有几种得分的可能。解题思路;首先问题可以转换成用i个数,组成和为j的种类,dp[i][j]。然后状态转移方程dp[i][j] = dp[i - 1][j] + dp[i][原创 2013-11-02 17:33:59 · 1493 阅读 · 0 评论 -
uva 991 - Safe Salutations(卡特兰数)
题目链接:uva 991 - Safe Salutations题目大意;给出n,表示在一个圆上有n对点,将点两两连接,要求不能有交线,有几种连接方法。解题思路:卡特兰数的应用。假设考虑第i个点,那么它只能j(j - i为偶数)相连。#include #include const int N = 15;int f[N];void init() {原创 2013-11-02 17:18:23 · 1488 阅读 · 0 评论 -
uva 11121 - Base -2(负进制转换)
题目连接:uva 11121 - Base -2题目大意:给出一个十进制的数,将这个数转换成-2进制的数。解题思路:进制转化是一种很简单的题型,可是对于负数的进制来说我就很陌生了,研究了蛮久的,这里分享一下。首先要了解如何将一个-2进制的数转换成十进制数,历7对应的-2进制数即为11011;1 * (-2) ^ 4 + 1 * (-2) ^ 3 + 0 *原创 2013-10-22 23:37:15 · 1559 阅读 · 2 评论 -
uva 10375 - Choose and divide(组合数)
题目连接:uva 10375 - Choose and divide题目大意:给出p,q,s和r, 计算C(p, q) / C(s, r), 公式题目已经给出。解题思路:以为C(p,q) = C(p,p - q), 所以要尽量选择计算量交少的,边乘边除。#include #define min(a,b) (a)<(b)?(a):(b)int main原创 2013-10-28 19:50:42 · 1298 阅读 · 0 评论 -
uva 11069 A Graph Problem(斐波那契数)
题目链接:uva 11069 A Graph Problem题目大意:给出一个n,要求求出子集由1 ~ n组成的集合的个数,集合还有一定的要求,就是集合中的任意两个数的差的绝对值要在2 ~ 3之间,而且子集的长度要尽量的长。解题思路:因为增加了子集的长度要尽量长,所有当考虑i时,也就是num[i - 2] + num[i - 3]这两种可能可以达到。#inc原创 2013-10-19 23:55:52 · 1252 阅读 · 0 评论 -
uva 10105 - Polynomial Coefficients(多项式系数)
题目连接:uva 10105 - Polynomial Coefficients题目大意:给出n和m,再该出m个数值n1 ~ nm, 保证n1 + ... + nm = n,现在有算式(a1 + a2 + ... + am) ^ n, 求展开项中a1^n1 + a2^n2 +...+ am^nm这项的系数。解题思路:(a + b)^n的系数为C(i, n), 那么对于算式(原创 2013-10-27 16:12:30 · 2072 阅读 · 0 评论 -
uva 10079 - Pizza Cutting
题目链接:uva 10079 - Pizza Cutting题目大意:有一个披萨,切n刀,问最多可以切几块。解题思路:对ans = {∑(1≤i≤n) i }+ 1。每次切割都与前i - 1刀有交点的情况下是最大的。#include long long sum;int n;int main () { while (scanf("%d", &n), n原创 2013-10-26 12:45:42 · 1497 阅读 · 0 评论 -
uva 10303 - How Many Trees?(卡特兰数)
题目链接:uva 10303 - How Many Trees?卡特兰数,公式num[i + 1] = num[i] * (4 * i - 6) / i ( i ≥ 3)。#include #include #include using namespace std;const int N = 6005;struct bign { int len, sex;原创 2013-10-26 17:18:03 · 1268 阅读 · 0 评论 -
uva 10334 - Ray Through Glasses(斐波那契数)
题目链接:uva 10334 - Ray Through Glasses题目大意:在2块玻璃中反射k次的光线条数。解题思路:斐波那契数列。#include #include #include using namespace std;const int N = 1005;struct bign { int len, sex; int s[N];原创 2013-10-26 17:10:22 · 1084 阅读 · 0 评论 -
uva 10183 - How Many Fibs?(斐波那契数)
题目连接:uva 10183 - How Many Fibs?题目大意:给出a和b,求出a~b中有几个数时斐波那契数。解题思路:模拟斐波那契数,找到临界的标号,相减的到答案。(大数)#include #include const int N = 105;struct bign { int len, sex; int s[N]; bign()原创 2013-10-26 12:38:24 · 1190 阅读 · 0 评论