数学
文章平均质量分 56
亚N程
这个作者很懒,什么都没留下…
展开
-
UVa:10105 Polynomial Coefficients(多项式定理)
多项式定理的应用,纯水题。 #include #include #include #include #include #define MAXN 1005#define INF 2139062143#define ll long longusing namespace std;ll Fac(int val){ ll res=1;原创 2014-01-11 15:45:05 · 756 阅读 · 0 评论 -
UVa:10780 Again Prime? No Time.
入门题啊。。总算是让我给想出来了。先对m分解质因数(这里要注意时间复杂度是根号m,循环外面还有一部分),然后对于枚举1到n,分别去除尽m的每个质因数,统计每个质因数被整除的次数。最后算m一共被整除多少次即可。 #include #include #include #include #include #include #include #define MA原创 2014-01-19 14:16:35 · 653 阅读 · 0 评论 -
UVa:10616 Divisible Group Sums
怎么看都感觉像个计数类的DP,但是数太大用01背包计数明显存不下,还好是问整除,所以取余即可,这样每个数最大可以不超过20。因为有负数所以得用带余除法来取余。dp方程是dp[i][j][k]=dp[i-1][j-1][k-v[i]]+dp[i-1][j][k]dp[i][j][k]表示前i个数使用j个组成和为k时的组合种数。用了滚动数组优化了第一维。有个特别注意的地方就是k的范围,我一原创 2014-01-29 23:53:01 · 695 阅读 · 0 评论 -
UVa:306 Cipher
这个题去年就看到了,但是用模拟的办法超时了。如果每次模拟都记录下字符串还会内存超限。后来得知是置换群。每个字符的出现都是有周期的,这样整个串的周期就是所有字符周期的最小公倍数数。如果求了串的周期,k取模之后再模拟,还是会超时。正确的办法是k对每个字符的周期取模,然后对字符操作。#include #include #include #include #include #inc原创 2014-02-02 14:16:21 · 695 阅读 · 0 评论 -
URAL:1049 Brave Balloonists
给你10个数,问你它们的乘积,这个数有多少个因子。输出因子数的最后一个数字。对每个数分解质因数,得到所有质因数及其指数,这些也是乘积的质因数及其指数。利用 某数的因子个数等于 它所有质因数指数+1的乘积 ,然后模10得到答案。#include #include #include #include #include #include #include #inc原创 2014-02-20 21:41:49 · 694 阅读 · 0 评论 -
UVa:11806 Cheerleaders
白书上的例题,跟LRJ写的基本一样。注意组合数的递推,这里写错WA了一次。用到了容斥原理,需要各种情况的组合,用二进制枚举子集,由于是从全集里面扣掉,所以奇变成了减,偶变成了加。感觉还是很厉害。。取余的时候如果有减法,要记得加一个模,避免出现负数。#include #include #include #include #include #include #d原创 2014-02-09 13:43:53 · 507 阅读 · 0 评论 -
UVa:11728 Alternate Task
简单题,只需要从S开始,从大到小枚举,取第一个所有正因子之和为S的即可。#include #include #include #include #include #include #define ll long long#define INF 2139062143#define MAXN 100005using namespace std;int S;原创 2014-02-28 22:02:35 · 658 阅读 · 0 评论 -
POJ:2356 Find a multiple(鸽巢原理)
鸽巢原理。开始只是胡乱蒙了一个结论写的,居然AC了,后来百度发现竟然是鸽巢原理。http://blog.csdn.net/u011026968/article/details/11564841这个人写的很好,我摘抄一段。a1,a2,a3...am是正整数序列,至少存在整数k和r,1证明比较简单:Sk表示前k个数之和, (1)若Sk%m==0,前k个数就是m的倍数(2原创 2014-01-18 22:07:14 · 1092 阅读 · 0 评论 -
UVa:10294 Arif in Dhaka (First Love Part 2)
Polya定理。先用一个置换的循环节数得到不动点数,由于这个题里面的置换都相同,可以得到全部置换的不动点数和,最后除以所有置换个数。计算置换的循环节有多种办法,可以用数学推导也可以模拟计算。题目中有提示是不会溢出的。#include #include #include #include //#include #include #include #include #i原创 2014-03-19 13:11:16 · 655 阅读 · 0 评论 -
UVa:10910 Marks Distribution
一开始感觉可以用计数类的dp,但是自己推了推发现了个规律,于是写了一个。。。不知道为什么只有1门课而且P小于T的时候是1为什么不是0。。(后来发现了,P是及格线,T是它的得分,问的是有多少种可能。。)后来在网上看见果然可以用计数类的dp来递推:首先问题可以转换成用i个数,组成和为j的种类,dp[i][j]。然后状态转移方程dp[i][j] = dp[i - 1][j] + dp[i][原创 2014-01-30 20:54:52 · 727 阅读 · 0 评论 -
UVa:1452 Jump
约瑟夫环。只要理解了用数学办法O(n)的思路求约瑟夫环最后一个元素的算法即可。在只求最后一个元素的时候,我们每次删除元素都进行了重新编号,新编号与旧编号有一个对应关系,即f【i】=(f【i-1】+k)%i,这里f【i】表示重新编号之后该元素的编号,f【i】表示旧编号。这样很清楚最后一次删除的必定是0号元素(假设编号从0到n-1),这样利用这个关系可以推出原始序列中这个元素的编号。同理,在倒原创 2014-03-04 08:26:33 · 709 阅读 · 0 评论 -
UVa:1394 And Then There Was One
约瑟夫环问题。最后一个删除的编号,递推公式是f【n】=(f【n-1】+k)%n。网上多数对这个公式说的不太清楚。假设编号从0开始到n-1。编号从0开始,我们很好求删掉的第k个元素,那么第一次删除了编号是k-1的数。为了方便求第二次删除的数,把剩下的数字重新编号,即从编号是k的元素开始,令它为0,这样把剩下的n-1个数字重新编号了。这里重新编号以后的下标和之前是有一个对应关系的,即x‘=(x原创 2014-02-09 14:21:43 · 701 阅读 · 0 评论 -
NEFU:115 斐波那契的整除
这个算是开了数学正式的第一道题了。斐波那契数列博大精深。。质数数量斐波那契数列的整除性与素数生成性每3个连续的数中有且只有一个被2整除,每4个连续的数中有且只有一个被3整除,每5个连续的数中有且只有一个被5整除,每6个连续的数中有且只有一个被8整除,每7个连续的数中有且只有一个被13整除,每8个连续的数中有且只有一个被21整除,每9个连续的数中有且只有一个被原创 2013-10-26 16:46:31 · 919 阅读 · 0 评论 -
UPC:2526 Color the necklace
http://acm.upc.edu.cn/problem.php?id=2526 这个题是http://blog.csdn.net/kkkwjx/article/details/21525325的加强版,也是Polya定理非常经典的题目。由于最后要除以2和4,在模运算里面直接除是不行的,要乘上2或4模MOD的乘法逆元。用到了Polya定理,求欧拉函数,求逆元,快速幂模#inc原创 2014-03-26 12:02:35 · 762 阅读 · 0 评论 -
UVa:1393 Highways
这个题思路是学习了别人的。我一直都是从点的角度考虑的,完全没有想到要枚举矩形。关键的思路:a与b互质且没有任何一点与a的横坐标之差和纵坐标之差都是b的两倍。另外把gcd打成了表,否则会超时。#include #include #include #include #include #define ll long long#define INF 2139062143原创 2014-01-28 14:16:39 · 787 阅读 · 0 评论 -
UVa:11609 Teams
这个题充分说明了我在组合数性质方面知识的欠缺。主要用到了kC(k,n)=nC(k-1,n-1)这个公式,最终答案是n*2^(n-1),再用快速幂计算即可。 #include #include #include #include #include #include #define MAXN 100005#define MOD 1000000007#defi原创 2014-01-19 15:42:47 · 688 阅读 · 0 评论 -
UVa:10820 Send a Table
欧拉函数。稍微一想就能发现只要x,y两个数互质那么统计在内。这样求1到n所有的欧拉函数值然后乘以2,表示(x,y)(y,x)两种情况,另外要减去1,因为(1,1)这种情况算了两次。得到的就是答案。这里用了LRJ白书上类似筛素数的办法求欧拉函数值,由每个素数出发乘进它被整除的数里面,最后所有素数可以构成它的欧拉函数值。感觉甚是厉害,慢慢领悟一下。#include #include原创 2014-01-11 22:09:49 · 534 阅读 · 0 评论 -
UVa:10056 What is the Probability ?
这个题只有俩星,确实不难。二项分布,求和,其实只能求一个近似值。 #include #include #include #include #include #include #define MAXN 1005#define INF 2139062143#define ll long longusing namespace std;int main原创 2014-01-12 12:16:54 · 645 阅读 · 0 评论 -
UVa:10918 Tri Tiling
三层的果然比二层的难想。我用了一点点动规的思想推导的。数组F表示此时可铺成的总数,f表示其中插头型铺法的种数。奇数的时候F[i]为0,偶数的时候,插头型可以补充满,另外之前F[i-2]可以直接使用三一型变成F[i]。所谓插头型是说最后一列瓦有竖放的,三一型则是最后两列是三个横放的瓦。 #include #include #include #include #in原创 2014-01-12 13:35:25 · 697 阅读 · 0 评论 -
ZOJ:3286 Very Simple Counting
题意就是让你求位于n之前和n因子个数相同的数字的数目。用类似于筛素数的方法求得每个数的因子个数。然后用类似于计数排序的思想求得答案。 #include #include #include #include #include #include #include #define MAXN 1000000#define MOD 1000000007#def原创 2014-01-13 12:43:19 · 724 阅读 · 0 评论 -
UVa:106 Fermat vs. Pythagoras
这个题如果不看题解,是肯定没办法AC的。http://www.cnblogs.com/scau20110726/archive/2013/01/18/2866957.html大致说一下方法。a=s*tb=(s*s-t*t)/2c=(s*s+t*t)/2a*a+b*b==c*c其中,s>t>=1且互质并皆为奇数。据此可以枚举s,t,另外注意利用a,b这是素勾股数的构造原创 2014-01-13 10:47:23 · 642 阅读 · 0 评论 -
UVa:10308 Roads in the North
这个题真的是胡乱想了个算法,然后WA了好多次,最后我找到了一组没过的数据,改了之后就AC了。。图是一个无向无环图,其实就是一棵树。百度到的题解用了dfs,递归每棵子树,答案可能是某两棵子树的和,最后返回一棵最长的子树。我的思路类似于拓扑排序或者关键路径,其实原理都是一样的。从度为1的节点开始拓展,不断拓展出更长的路径。#include #include #include原创 2014-01-21 13:39:31 · 620 阅读 · 0 评论 -
UVa:11481 Arrange the Numbers
这个题应该也可以用递推来做(LRJ白书上这么写的,但是我不会),我用了容斥原理。公式是ans=C(m,k)*【(n-k)!-C(m-k,1)*(n-k-1)!+C(m-k,2)*(n-k-2)!-……+(-1)^i*C(m-k,i)*(n-k-i)!】其中i的范围是【0,m-k】这个公式用排除法很好想到,但是我却因为不会求组合数不会模运算折腾了好长时间。。。 #include原创 2014-01-16 15:02:23 · 923 阅读 · 0 评论 -
UVa:11038 How Many O's?
因为很弱打表找了规律,因为很弱找了半天。转网上写的:统计[m,n]这个区间有多少个0分位数分析:n的第i位为0=n左边的数(高位)*10^(i-1)n的第i位不为0 =(n左边的数-1)*10^(i-1)+(i位右边的数+1)ans=f(n)-f(m-1); #include #include #include #include #includ原创 2014-01-25 14:54:19 · 664 阅读 · 0 评论 -
UVa:991 Safe Salutations
这么水的题都想了半天,真是弱爆了。。通过两个点,把圆分成两部分,然后求解子问题即可。#include #include #include #include #include #include #include #include #include #include #define MAXN 100005#define MOD 1000000007原创 2014-01-25 17:02:27 · 686 阅读 · 0 评论 -
ZOJ:1164 Software CRC
此题在ZOJ上AC,UVa上一直TLE,不知为何。其中res这个变量要用longlong,用int会WA,虽然我感觉int足够。这个题主要是用到了一个进制转化的问题。就像十进制里面每位相差10倍关系,二进制则是两倍关系。懂了这点就好做了。取余的时候二进制可以转化成十进制来算。最后枚举答案看是否能整除就行了。一开始以为CRC是两块,30000*30000妥超时,后来才发现它是一个数。原创 2014-01-12 11:12:43 · 758 阅读 · 0 评论 -
UVa:10229 Modular Fibonacci
本来以为要用矩阵,结果在网上无意中看到斐波那契数列的另一个通项公式,于是写了一个,试了最大数据,果断超时,然后加了个记忆化,然后就AC了。。贴吧上看到的。Fibonacci数是组合数学中非常重要的一个数列,它的递推公式是: F(1)=F(2)=1 F(n)=F(n-1)+F(n-2) 当然,用这个公式来计算F(n)是非常慢的,当计算F(n)时需要从F(1)一直计算到F(n原创 2014-01-28 15:52:12 · 755 阅读 · 0 评论 -
UVa:11388 GCD LCM
如果A不能整除C则无解,否则B最小值为C/A,最大值为C,在这个范围内每次增加C/A,枚举符合的即可。 #include #include #include #include #include #include #include #define MAXN 505#define MOD 1000000007#define INF 2139062143#原创 2014-01-18 21:44:26 · 808 阅读 · 0 评论 -
UVa:10162 Last Digit
这个题其实是找规律。0到9每次数字的x次方所得到的最后一位数字是有周期循环的,比如说1的周期就是1,2的可能得到2,4,8,6,2周期就是4,其他数字也是。周期一共有1,2,4这几种(大概是,记不清了)。设周期为r,再利用x^x这个条件,可发现每个数在周期内的变化量是10%r,也就是说每10个数它在周期内的位置就会变化10%r。这时候发现有一些数字的变化是同步的,也有不同步的,这样有两种情况,巧的原创 2014-01-19 15:58:54 · 649 阅读 · 0 评论 -
UVa:11076 Add Again
第三百个题。这个题比较好想。对于所有组合得到的整数来说,它们某个确定位上的数字就是给定的这些数字。对于每个数字统计它出现的次数,然后算当这个数位于最后一位的时候,有多少种情况。这里用到了一个排列组合去掉重复元素的公式,也很简单。算出所有数的所有情况以后再求和,这样再算n位就行了。#include #include #include #include #inclu原创 2014-01-19 17:15:36 · 679 阅读 · 0 评论 -
UVa:10892 LCM Cardinality
只要求出n的所有约数,然后枚举一对约数看其最小公约数是否是n即可。#include #include #include #include #include #include #include #define MAXN 505#define MOD 1000000007#define INF 2139062143#define ll long long原创 2014-01-19 13:44:18 · 709 阅读 · 0 评论