数学
文章平均质量分 54
leohujx
这个作者很懒,什么都没留下…
展开
-
hdu5312
看官方题解可知: 此题元素组成的公式为3n*(n-1)+1,如果m是由其k个元素组成,那么m = 3*n*(n-1)k+k,而我们发现,3*n(n-1)肯定是一个6的倍数,而还要注意我们要特殊判断m是否能由1个或者2个元素组成,当元素数目大于等于3时,我们再用m = 3*n*(n-1)*k+k判断,化简之,就是(m-k)%6 == 0,找到最小的k即可。#include<stdio.h> #inc原创 2015-07-26 11:30:04 · 532 阅读 · 0 评论 -
数学专题1
A:相当于已知 f[i] = 2*(f[i-1]+f[i-2]),然后求f(n),n大到2^60,所以我们无法用递推,此时我们就用矩阵快速幂。#include<stdio.h> #include<iostream> #include<string> #include<string.h> #include<algorithm> #include<iomanip> #include<vector> #i原创 2015-10-10 16:19:54 · 327 阅读 · 0 评论 -
poj 3104
题意易懂。 如果枚举的话,肯定会超时。所以我们用二分来得出最小的时间。假设此时我们最小时间为mid,那么对于衣服的含水量a[i]<=mid的来说,我们不必用吹风机去干燥它,只需让它自然风干即可。 那么对于a[i]>mid的来说,最好的方案就是先用吹风机吹,再自然风干。我们设用吹风机吹了c次(也就是用了c分钟),自然风干的时间就是mid-c,则 mid-c+c*m>=a[i],m是吹风机吹一次能够原创 2015-10-06 11:16:00 · 407 阅读 · 0 评论 -
poj 3273
刚开始没有注意到 每个月都得在一组里面,即当a[i]>当前的最大值时,是不符合条件的。 答案的话明显用二分,二分那个最大花费就行。#include<stdio.h> #include<iostream> #include<string> #include<string.h> #include<algorithm> #include<iomanip> #include<vector> #includ原创 2015-10-06 10:13:02 · 307 阅读 · 0 评论 -
poj3258
二分题目所求的最大的最短距离即可。 每二分得到一个距离x,我们就看看相邻两块石头之间的距离是否大于等于x,否则的话就移除编号大的石头,直到符合条件为止。#include<stdio.h> #include<iostream> #include<string> #include<string.h> #include<algorithm> #include<iomanip> #include<vect原创 2015-10-06 09:37:20 · 368 阅读 · 0 评论 -
poj 3421
题目给出一个X,求从1到X列出一串数字X0,X1,X2..Xm使得 X0=1,Xm=X,Xi < Xi+1 且Xi+1%Xi=0的m的最大值及方法数 此题本质是让你求X的素数因子,然后进行组合。 比如我们有个100, 100=2^2 * 5^2,那么m的最大值为2+2=4,方法数为4!/(2!+2!) 我们可以这样将100的素数因子排列, 2 2 5 5,那么从前往后乘,得到1 2 4 20原创 2015-10-05 17:07:39 · 338 阅读 · 0 评论 -
poj1930
无限循环小数化分数的问题。 首先,题目的意思是后面的….可能重复任意的小数部分,所以我们得枚举循环的部分。 结论是这样的: 假设有个无限循环小数0.abcdefgh…..非0部分长度为len 那么我们令其非循环部分长度为c(设为abcde),循环部分为k(fgh),c+k=len 我们先计算出 abcdefgh.循环部分(tmpa),即0.abcdefgh*10^len 再计算出 abc原创 2015-10-05 11:18:06 · 361 阅读 · 0 评论 -
CF #328
A:每次在一列中遍历所有行即可,从上往下找找第一个能到顶端的”W”,从下往上照找第一个能到底端的“B”,最后比较较小的那个就行。但是注意题目有说“W”的先动,所以如果它们到达目的地的步数一样时,A获胜。#include<stdio.h> #include<iostream> #include<string> #include<string.h> #include<algorithm> #includ原创 2015-11-03 11:31:17 · 454 阅读 · 0 评论 -
hdu5373
当初做这道题时犯了一个致命的错误。。那就是我一直认为求digit sum就是对9取余。但这道题目不一样,它不要求将digit sum化为一位数,也就是如果当初的数是88,那么digit sum是16,而不是对9取余的7。。 然后还要知道一个数如果能被11整除,它的特点是 奇数位上的和-偶数位上的和能被11整除。 这里是一个链接,列举了一些能被1,2,3……11等整除的数的特征: 整除-百度百原创 2015-08-12 14:43:05 · 535 阅读 · 0 评论 -
hdu5358
参照别人代码写的(感谢)。原题中,我们看到那个式子的时候,应该想到,我们得枚举2的幂次,然后再求在那个区间内i+j的总和。一共有10^5个数,每个数最大为10^5,所以我们枚举到2^34即可。至于在求区间内i+j的总和时,我们之前用sum[]来记录数组的前缀和,然后枚举每个点i,用指针l和r来求得满足sum[i~l]>=L且sum[i~r]<R ,L和R是为2^(k-1)和2^k,由题意可得,原创 2015-08-07 17:33:59 · 646 阅读 · 0 评论 -
poj2886
线段树+反素数。这题是类似于约瑟夫环的问题。 首先我们得了解反素数,我们有n 个人,那么就至少有n个回合,要求第几个出局的人获得的糖果最多(获得的糖果数等于第i轮出局的人,i所含的因子的个数),而反素数的定义就是对于一个数字x,有任意一个i(0< i < x),都有g(x)>g(i) (g(x)代表x所含的因子的个数),所以对于1-n来说,含有因子的数目最多,又得是最多里面数字最小的,那么只有那个原创 2015-11-10 20:31:43 · 756 阅读 · 0 评论