随笔分类 -  数学

摘要:因为所有整数都能被唯一分解,p1^a1*p2^a2*...*pi^ai,而一次询问的数可以分解为p1^a1k*p2^a2k*...*pi^aik,这次询问会把所有a1>=a1k && a2 >= a2k &&...a3 >= a3k的数从原来的集合中分开。ai表示pi的幂。那么只有当这个数的素因子的... 阅读全文
posted @ 2015-09-11 03:57 瑞宇 阅读(224) 评论(3) 推荐(0)
摘要:每个加油的站可以确定一个alpha的上下界,比如,第i次加油站a[i],前面加了i次油,a[i]*10≤ alpha*i using namespace std;typedef long long ll;ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; }stru... 阅读全文
posted @ 2015-09-05 17:47 瑞宇 阅读(323) 评论(0) 推荐(0)
摘要:其实挺简单的。先直接算出之前已经排在k这个数前面的数字。比如543是三位的,那么100~543都是可以的,两位的10~54。如果还需要往前面补的话,那么依次考虑1000~5430,5430是上界不能选,10000~54300。有一种情况样例4是10000~10000,,这样是不会增加的应该输出'0'... 阅读全文
posted @ 2015-09-04 21:35 瑞宇 阅读(433) 评论(0) 推荐(0)
摘要:打个表找找规律,到24445的时候乘2以后产生了0出现循环。一般地,判断循环节是否存在可以用Floyd判圈算法。#includeusing namespace std;typedef long long ll;int ans[]{-1,1,2,4,8,16,23,46,29,58,116,223,4... 阅读全文
posted @ 2015-09-03 18:20 瑞宇 阅读(226) 评论(2) 推荐(0)
摘要:不难发现在一次操作以后,hi=min(hi-1,hi-1,hi+1),迭代这个式子得到k次操作以后hi=min(hi-j-(k-j),hi-k,hi+j-(k-j)),j = 1,2,3...当k == min(hi-j+j,hi+j+j)时hi会变成0,因为min具有传递性,那么可以左右分开来考虑... 阅读全文
posted @ 2015-08-30 10:17 瑞宇 阅读(237) 评论(0) 推荐(0)
摘要:简单题,求一下所有数的2和3的幂是任意调整的,把2和3的因子除掉以后必须相等。求lcm,爆了long long。我得好好反省一下,对连乘不敏感#includeusing namespace std;typedef long long ll;const int maxn = 1e5+5;ll a[ma... 阅读全文
posted @ 2015-08-30 09:36 瑞宇 阅读(158) 评论(0) 推荐(0)
摘要:一开始想着球盒模型,数据范围大,递推会GG。用凑的方法来算方案。往n个小球之间插两个隔板,方案是(n-1)*(n-2)/2,不区分盒子,三个盒子小球数各不相同的方案数被算了6次(做排列),两个相同的被算了3次,如果n可以被3整除,那么3个相同的被算了一次。全部都加到6,在一起除以6就得到总的方案数。... 阅读全文
posted @ 2015-08-24 14:07 瑞宇 阅读(237) 评论(0) 推荐(0)
摘要:枚举盒子的个数,先把总数n减去掉box*k保证每个盒子至少有k个小球,剩下的小球放入盒子中可以为空,加入box个小球保证每个盒子至少有一个小球,问题转化成不可区分小球放入不可区分盒子非空的方案数。C[i][j]表示i个小球放入j个盒子非空的方案数,那么C[i][j] = C[i-1][j-1]+C[... 阅读全文
posted @ 2015-08-24 13:26 瑞宇 阅读(235) 评论(0) 推荐(0)
摘要:一个合法的三角形的充要条件是a=b+c+r,很容易转化为rusing namespace std;typedef long long ll;ll cal(int a,int b,int c,int tl){ int r = (a-b-c+tl)>>1; if(rtl) r = tl; ... 阅读全文
posted @ 2015-08-23 12:31 瑞宇 阅读(362) 评论(0) 推荐(0)
摘要:递推就好了,用二项式定理算出所有连边的方案数,减去不合法的方案,每次选出一个孤立点,那么对应方案数就是上次的答案。枚举选几个孤立点和选哪些,选到n-1个点的时候相当于都不选,只减1。要用到高精度,直接开100*100的组合数数组会MLE,用滚动数组优化一下就好了。不会java,python太伤了#i... 阅读全文
posted @ 2015-08-21 18:13 瑞宇 阅读(214) 评论(0) 推荐(0)
摘要:对于一个数来说,它的除数是确定的,那么它的前驱也是确定的,而起点只能是1或2,所以只要类似筛法先预处理出每个数的除数个数,然后递推出每个数往前的延伸的链长,更新最大长度,记录对应数字。找到maxn以后,根据最后一个数找到前驱,并记录到ans数组中。代码来自队友#include#include#inc... 阅读全文
posted @ 2015-08-11 00:15 瑞宇 阅读(337) 评论(0) 推荐(0)
摘要:不难发现,每过一个小时,除了右下方的气球全都是蓝色以外,其他都和上一个小时的气球是一样的,所以是可以递推的。然后定义一类似个前缀和的东西f(k,i)表示k小时之后上面i行的红气球数。预处理出k小时的红气球总数c(k),递归时候注意终止条件。#includeusing namespace std;ty... 阅读全文
posted @ 2015-08-09 17:51 瑞宇 阅读(260) 评论(0) 推荐(0)
摘要:题意:麦田的故事,n张牌,取x张牌,记住前x张牌最大的值m,继续往后取,遇到第一张比m大的牌就停下来。求一个x使得最后的牌在整副牌里是最大的期望最大。假设最大的牌是A,A在各种位置出现的概率就是相等的,因为题目不要求输出概率,所以当成1。在A固定的情况下,在它前面的牌中最大的牌B,出现在各个位置的概... 阅读全文
posted @ 2015-08-08 00:14 瑞宇 阅读(338) 评论(0) 推荐(0)
摘要:先证明一个结论吧,对于1≤ai≤i+1,前面ai个数一定可以凑出1~sum[i]中的任意一个数.对于i=1显然成立,假设对于i=k结论成立,那么对于i=k+1来说,只要证明sum[k]+i,1≤i≤ak+1可以凑出来就行了。因为sum[k]+i≥k+1,且1≤ak+1≤k+1,所以可以先选一个ak+... 阅读全文
posted @ 2015-08-04 17:41 瑞宇 阅读(839) 评论(0) 推荐(1)
摘要:题意:在一个n个点的无向连通图中,n是奇数,k是使得所有点的度数不超过k的最小奇数,询问一种染色方案,使得相邻点的颜色不同。题解:一个点和周围的点的颜色数加起来最大为它的度数+1;如果最大度数是偶数,那么k种颜色一定够了。如果最大度数是奇数,而且n是奇数,那么k种颜色也一定是足够的。 可以反证,最大... 阅读全文
posted @ 2015-08-04 16:14 瑞宇 阅读(1139) 评论(0) 推荐(0)
摘要:摘要:数形结合,斜率优化,单调队列。题意:求一个长度为n的01串的子串,子串长度至少为L,平均值应该尽量大,多个满足条件取长度最短,还有多个的话,取起点最靠左。求出前缀和S[i],令点Pi表示(i,S[i]),那么这个问题就转化成了求斜率最大的两点。画图分析可知,如果有上凸点,那么上凸点,一定不会是... 阅读全文
posted @ 2015-08-01 15:28 瑞宇 阅读(590) 评论(0) 推荐(0)
摘要:题意:有两种颜色的小球形成环,求最小交互次数使球相连。题解:先解决另一个简单的问题,如果是一个链,把红球标记为1,蓝球标记为0,要排成升序需要多少次交换呢?答案是逆序对总数,原因是一次交互最多消除一个逆序对,而且有策略可以保证每次消除一个逆序对。要解决这个问题,需要做一些变通。看蓝球,因为是环,为了... 阅读全文
posted @ 2015-07-26 22:06 瑞宇 阅读(390) 评论(0) 推荐(0)
摘要:题意:给n个元素,从n中选两个非空集合A和B。问有多少中选法?递推:dp[n]表示元素个数为n的方案数,对于新来的一个元素,要么加入集合,要么不加入集合自成一个集合。加入集合有三种选择,A,B,E(可空的集合),或者自成集合,作为A或B,然后在选一个n-1个元素的非空子集(2^n-1 - 1)。#i... 阅读全文
posted @ 2015-07-19 00:37 瑞宇 阅读(321) 评论(0) 推荐(0)
摘要:题意:给两个一样的只含有26个小写字母的字符串,然后两个分别做一下排列,问如果对应位置的字母相等那么就愉悦值就加一,问愉悦值的期望是多少?题解:只考虑两个序列相对的位置,那么就相当于固定一个位置,另外一个序列做排列。对于一个字符,假设是a,然后a有Na个,那么a选第一个序列中a对应的位置,发生这个事... 阅读全文
posted @ 2015-07-19 00:00 瑞宇 阅读(482) 评论(0) 推荐(0)
摘要:题意:分段用椎台面积近似计算体积,然后计算出近似值和真实值的相对误差微积分加数学。平头椎台的体积计算公式:V = 1/3*h*(S1+S2*sqrt(S1*S2)一个更快的计算多项式值的方法: for(int i = 15; i >= 0; i--) ans = ans*x+p[i],比直接pow快... 阅读全文
posted @ 2015-07-17 20:42 瑞宇 阅读(509) 评论(0) 推荐(0)