算法竞赛入门经典 (第二版) 第十章 数学概念与方法
wcr1996
个人博客:wcr1996.com
展开
-
UVa 11526 - H(n)
ACM对抗赛决赛题,在比赛时没出,后来找学长给讲了,利用相同值一起加减少运算次数,就过了。#includeusing namespace std;long long H(long long n){ long long res=0,cur,last=n; for(long long i=1;i<=n;i++){ cur=n/i; res+=cu原创 2015-01-23 19:43:58 · 1349 阅读 · 0 评论 -
UVa 11582 - Colossal Fibonacci Numbers!(取模+周期)
计算第a^b个斐波那契数对n取模的值。对不同的n取模,最长n^2就会出现循环。首先预处理计算所有可能的值,然后对每个输入快速幂取模找在周期中的位置输出。数据大必须用unsigned long long。原创 2015-07-27 10:24:55 · 1535 阅读 · 0 评论 -
12169 - Disgruntled Judge(扩展欧几里得+枚举)
首先枚举所有a,然后利用扩展欧几里得算法求出b。之后进行验证。原创 2015-07-27 14:46:35 · 1613 阅读 · 0 评论 -
UVa 12716 - GCD XOR(筛选+规律)
输入一个数n(1≤n≤30000000),输出有多少对整数满足1≤a≤b≤n且gcd(a,b)=a xor b。设c=a xor b,则a xor c=b。找规律可得,当满足条件时,c=a-b。因此,枚举c、a,对每一对验证c=a xor b即可。时间复杂度O(nlogn)。原创 2015-07-27 21:10:59 · 1361 阅读 · 0 评论 -
UVa 10820 - Send a Table(欧拉函数)
求给出的范围内有多少对互素的整数答案为2*f(n)+1,f(n)=sum{phi(n)}。原创 2015-07-28 16:39:36 · 1284 阅读 · 0 评论 -
UVa 10622 - Perfect P-th Powers(对数+快速幂)
枚举50000以内的数,对数,利用快速幂求值验证。原创 2015-07-28 16:41:49 · 1325 阅读 · 0 评论 -
UVa 1635 - Irrelevant Elements(唯一分解)
对m进行分解,然后从C(n-1,0)计算到C(n-1,n-1),对每个数能否被m整除。原创 2015-07-28 16:31:41 · 1360 阅读 · 0 评论 -
UVa 1643 - Angle and Squares(叉乘求面积)
给出两个点和多个正方形,求两点与原点连线和正方形围成的最大面积。当正方形对角线共线且与两边构成等腰三角形是面积最大。联立方程求出三角形底边两点坐标,然后利用向量叉乘求出面积。原创 2015-07-28 16:46:41 · 1709 阅读 · 0 评论 -
UVa 1218 - Perfect Service(树形DP)
给出一个计算机网络,选取其中给一部分作为服务器,问最少选择几个服务器。一共有三种状态:1、d[u][0]:u是服务器,每个子结点可以是也可以不是。2、d[u][1]:u不是服务器,但u的父亲是,u的子结点都不是服务器。3、d[u][2]:u和u的父亲都不是服务器,u的子结点恰有一个是服务器。原创 2015-07-29 20:09:29 · 2171 阅读 · 0 评论 -
UVa 10868 - Bungee Jumping(物理公式)
中学物理知识推推公式就能出来,没什么好说的了。原创 2015-08-30 11:47:14 · 1740 阅读 · 0 评论 -
UVa 1647 - Computer Transformation(找规律+递推)
暴力枚举前几项后发现规律a[i]=a[i-1]+2*a[i-2]。然后打表就好。原创 2015-08-30 11:51:50 · 1569 阅读 · 0 评论 -
UVa 10791 - Minimum Sum LCM(唯一分解)
首先筛选出2到sqrt(2^31-1)的素数,然后对每个输入的数进行分解。最后若只有一个素因子,则得出的和要加1。输入为1时,输出为2。原创 2015-07-27 19:47:11 · 1466 阅读 · 0 评论 -
UVa 11105 - Semi-prime H-numbers(筛选法)
类似于筛选素数的方法,枚举前缀和即可。原创 2015-07-25 19:33:32 · 1511 阅读 · 0 评论 -
UVa 294 - Divisors(唯一分解)
给出一个区间,问其中哪个数因子最多。对每个数进行唯一分解,然后求出素因子乘积即为因子个数。原创 2015-07-25 19:28:57 · 1395 阅读 · 0 评论 -
UVa 1644 - Prime Gap(筛选求素数)
求给出的数最近的两个素数的差,若给的数是素数,输出0。在青岛理工大学邀请赛时,做过这道题,当时打表打在循环内了,超时了。这个问题一定要注意。再说这个求素数,之前OJ作业上做到过筛选求素数的题,后来百度过高速求素数的方法,XA2的Xcode 5亿素数5秒左右,具体代码如下。原创 2015-01-23 19:37:19 · 2140 阅读 · 0 评论 -
UVa 1641 - ASCII Area(统计)
给出由"/"、"\"、"."组成的矩形,求围出的多边形的面积。之前在青岛理工大学邀请赛做过,对于"/"和"\"每个都是0.5,对于"."只有在多边形内部的为1。用q来标记是否在多边形内部,在读入的同时完成统计。原创 2015-01-23 19:35:49 · 1701 阅读 · 0 评论 -
UVa 10539 - Almost Prime Numbers(筛选求素数)
给出两个1e12以内的数,求有多少不是素数,但是一个素数的n次方(n>1)数。一开始用set存了所有的数,之后用set.find()循环求得两个迭代器,再用distance求个数,但是因为所求的数的间隔较大,循环会超时……虽然超时了,但是学了求迭代器距离的方法,收获也挺大。后来改为如下做法,首先打素数表,然后分别求比所给的两个数小的数的个数,求两者差。原创 2015-02-15 16:52:35 · 1633 阅读 · 0 评论 -
UVa 1210 - Sum of Consecutive Prime Numbers(素数+连续和)
求所给的数能用多少种连续素数的和表示。类似于求最大连续和优化的方法。使用前缀和减少运算。然后输入范围是2到10000,貌似可以打表交。原创 2015-02-15 17:03:17 · 1651 阅读 · 0 评论 -
UVa 10491 - Cows and Cars(概率)
有a头牛,b辆车,a+b个门,开始任选一个,然后排除掉c个有牛的门,求换门之后获得车的概率。书上解释很详细了。原创 2015-03-15 14:47:20 · 1394 阅读 · 0 评论 -
UVa 1636 - Headshot(概率)
给出一个长度为n的01串表示子弹序列,打一枪空的,求下一枪的策略。书上给出了思路,统计串中00和0的个数a和b,然后求概率a/b和b/n的大小。前者大是SHOOT,后者大是ROTATE。原创 2015-03-15 14:33:04 · 1308 阅读 · 0 评论 -
UVa 1646 - Edge Case(斐波那契+大整数)
给出n个点,求有多少组边<a,b>满足|a − b| ≡ 1 mod n。设P[n]为边的个数,P[3]=4,P[4]=7。此后每项都是前两项的和。因为到10000项数很大,所以要用大整数,Java大整数比C++方便就用了。原创 2015-03-17 16:59:27 · 1828 阅读 · 0 评论 -
UVa 1645 - Count(递推)
给出一个数n,求n个结点的树有多少种结构满足每个结点的子结点数相同。n结点树,除去根结点,有n-1个结点,根结点的每棵子树需要完全相同,所以根结点的子树个数k,满足(n-1)%k==0。然后就可以递推打表了。原创 2015-03-11 18:12:52 · 1745 阅读 · 0 评论 -
UVa 557 - Burger(概率+递推)
给出一个偶数n(2≤n≤100000)。表示一共有2n个汉堡,其中牛肉汉堡和奶酪汉堡各有n个。有2n个人每个人吃之前投硬币,正面吃牛肉汉堡,反面吃奶酪汉堡。问最后两个人吃到相同汉堡的概率。原创 2015-03-16 17:47:43 · 1446 阅读 · 0 评论 -
UVa 12034 - Race(组合+递推)
书上给了公式,照着敲的。原创 2015-07-25 19:15:17 · 1296 阅读 · 0 评论 -
UVa 1262 - Password(组合数)
给出两个6*5矩阵,有一个5位的密码,密码的第i位必须在两个矩阵的第i列都出现过,问输出字典序第k大的满足条件的密码,无解输出“NO”。预处理出每一位满足条件的字母,然后计算后几位密码可行的种数。对k进行判断后输出,具体细节见代码。原创 2015-08-30 16:03:45 · 2049 阅读 · 0 评论