![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
<<<<数学>>>>
文章平均质量分 90
luckyone2014
想思路是苦涩艰辛的,但是打代码是愉快的。
展开
-
hdu 2058 The sum problem 数学题,想了好久,,
// 公式 m=(a+a+k-1)*k/2; k为长度 a为起始数字 //开始的时候,是想用 起点和终点来当变量的. 后来wa了. 认真想想,是因为这两个变量 就算用了二次函数的公式推导来优化. //也都会在数据为 n=10^9 m=1 或n=10^9 m=10^9 的时候需要遍历一次.显然超时的. //无奈看了讨论, 看到别人用区间长度来做 恍然大悟粗略估计下 k就不能超过sqrt(2m)这个量级, 看下数据的强弱 显然是可以过的.原创 2014-08-01 20:47:48 · 721 阅读 · 0 评论 -
hdu 5288 OO’s Sequence 分解因子
题意: 本来的题意问 枚举所有i,j ,1<=i<=j<=n, 然后计算f(i,j)和是多少。 f(l,r)的值 是 输入的数组下标 l到r中有多少 数是无法被这个区间 任意一个数整除的。 做法: 转换种思想就是 某个数num[i],在多少个区间内 可以不被区间其他任何数整除。 答案加上区间个数。 所以 可以左右两边枚举过来。 以左边枚举过来为例: 把最近出现的数 记录下来,记录到 has数组。 如num[i] 记录成has[num[i]]=i 然后把每个数的因子枚举,判原创 2015-07-21 21:44:57 · 1142 阅读 · 0 评论 -
hdu 5358 First One 数学
题意:根据那个公式算出 ans。 做法:之前想着 枚举 左端点,再枚举 33个二进制数,再二分右端点来写。 O(33*n *log n) , t掉了。 这题卡时间卡得很严,看了题解后 ,发现有O(33*n)的做法。 显示枚举 33个二进制数, 然后取 num[i] num[j] 作为边界 L,R, 再枚举左端点,左端点遍历的时候 根据LR, 找到 右端点的范围l 和r 要求 L<=s(i,l)<=s(i,r)<R , 左端点不断右移,所以 边界l,r 也不断右移 不用回溯,所以是线性的原创 2015-08-07 15:15:39 · 849 阅读 · 0 评论 -
hdu 1719 Friend 数学推导
题意:1和2是友好数,如果a,b是友好数,那么a*b+a+b也是友好数。 做法: friend=a*b+a+b=a*b+a+b+1-1=(a+1)*(b+1)-1 假设a=(c+1)*(d+1)-1 b=(e+1)*(f+1)-1 那么friend=(c+1)*(d+1)*(e+1)*(f+1)-1 然后可以把一个friend数通过这样,不断带入分解,最后肯定是 (c+1)*(d+1)*(e+1)*(f+1)*(g+1)*(h+1)*(i+1)*.....-1这种形式,分解到最后,就是里面字母全是1或者2了原创 2015-07-07 21:41:28 · 890 阅读 · 0 评论 -
hdu 1722 Cake 数学yy
一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食. 想一下,如果把蛋糕均分为n份,那相当于把蛋糕对准中心线,每刀切半径长度,均匀切n刀。如切八分,就相当于切米字形。 然后p块,q块分别都是切p刀和q刀。如果p=8,q=4,那么就分别是切米字型,和十字形了,然后把两则重合,重合的地方只用切一次,就够了。 然后发现只用切八刀,然后多试几次就发现一共要切p+q-gcd(p,q)刀。原创 2015-07-08 10:41:05 · 728 阅读 · 0 评论 -
ZOJ 3591 Nim 前缀和+位运算
题意:通过他给的代码,跑出 n个数a【i】。 然后取任意多个连续的数,让他们 异或操作。 计算有多少种取法,使操作后结果为0. 做法:连续就想到了前缀和。 把前i个a的异或操作结果放在 num[i]中, 那么a【i】到a【j】个数的异或结果就是 num[j]^num[i-1]。 还有num【i】自身代表了开头到a【i】这些数的异或结果。 然后只要计算有多少num【i】为0,以及多少 num[j]^num[i-1] 为0就行了。再把总方案数 c(n,2)减去为0的个数,就是答案了。但是普通原创 2015-04-07 20:02:51 · 840 阅读 · 0 评论 -
lightoj 1349 - Aladdin and the Optimal Invitation 贪心 中位数
题意: 有n*m的 格子。 然后输入每个格子的人数。 最后决定所有人到达一个格子,要求每个人走的路都最少。 做法:横坐标为i 的 所有格子人数和 放在numr【i】里 。 纵坐标同理。 这个格子的 横坐标和纵坐标的选择是不会相互影响的。 我们只用找到 所有格子的总人数和,取一个中位数mid=sum/2,然后判断第mid个人在第几行,那行就是答案的横坐标。 因为,如果这个横坐标向下移,因为它本来是中位数,所以上面的人数肯定变得大于下面的人数。而结果会导致,这个横坐标上面的人 要多走一步,下面的人少走一原创 2015-04-07 19:40:15 · 727 阅读 · 0 评论 -
URAL 1295 Crazy Notions 数学 找规律
题意:输入一个n,计算ans= 1^n+2^n+3^n+4^n ,输出ans末尾几个0。 做法:规律题,刚开始暴力,看了下规律,发现最多末尾只会有2个零。而且有一定规律。所以可以找循环节,n%20。 或者用快速幂,我用快速幂,循环了一遍1到300000,发现确实末尾最多只有两个0,所以。。。原创 2015-03-07 19:17:51 · 742 阅读 · 0 评论 -
hdu 1422 重温世界杯 类似最大子串和
做法:把给的 费用减去花费。得到的值就是一个城市所获得的 或花去的钱。 然后从第一座城市开始,poi都加上这个值,poi为负时初始化,为正时跟新ans为最大值。和最大子串和基本一样,不过因为可以是环,所以 结尾城市遍历完 还要再到开头。原创 2015-03-05 19:11:47 · 438 阅读 · 0 评论 -
URAL 1828. Approximation by a Progression 数学
题意 : 给定整数数组 ai。求一个等差数列bi。 等差数列bi要能使∑(ai − bi)2 最小的。输出 b1,d。两者可以是小数。 做法:推公式比较麻烦。步骤如下: 为方便计算 设 第零为b0,方差为d。 那么 bi=b0+i*d 。b1=b0+d。原创 2015-03-15 20:19:55 · 697 阅读 · 0 评论 -
URAL 1823. Ideal Gas 数学,分类
高中学的:pV=nRT,即理想气体状态方程 题意:知道三个变量求剩下一个变量。其中R是已知常量=8.314。其中V,T必须要大于0。如果出现矛盾就输出error。如果出现不确定的情况输出undefined。 分类:以求V为例子。如果p和n 有只一个为0 那T和V中也必须有个是等于0的。所以和题意矛盾。输出error。 如果p,n同时为0,那么就无法求出V是多少。输出undefined。 其他情况直接计算即可。原创 2015-03-15 19:28:49 · 692 阅读 · 0 评论 -
hdu 1007 Quoit Design 最近点对
一道题目,最近点对的模版题。原创 2015-01-25 20:40:07 · 730 阅读 · 0 评论 -
ural 2003. Simple Magic 数论 因数分解
题意:就是一列数字, 像他给的样例一样操作 {2, 3, 3, 6} turns it into array {gcd(2, 3), gcd(2, 3), gcd(2, 6), gcd(3, 3), gcd(3, 6), gcd(3, 6)}, that is {1, 1, 2, 3, 3, 3}. 然后问,不断这要操作,几遍可以得到都是1的数组。 做法: 暴力打个表发现 要么 只用1次 要么两次 要么 就是无穷的。 因为n很大,操作一次就要超时的。所以要在原始数组中想方法判断。 开始,我是通过暴力打表原创 2015-02-12 14:55:33 · 809 阅读 · 0 评论 -
URAL 1515 Cashmaster 数学题
题意:从小到大输入n个数,这n个数每个数只用一次,可以通过加法组成很多数。然后从1开始判断这些数无法组成的最小的一个数。 做法:如果开头不是1,那输出就是1了,因为无法通过别的数来获得1。如果开头是1,第二个不是2那就输出2,也是因为不能通过别的数加成2了。 那么有了基础就可以开始递推了。假设 前x-1个可以获得任意小于 前x-1个数的和 的数。那么假设x-1个数的和 大于等于第x个数-1,那么就是从1到x-1个数都可以组成。如果不行直接输出前x-1个数的和就好了。原创 2015-02-12 09:52:16 · 531 阅读 · 0 评论 -
hdu 4908 BestCoder Sequence 找M为中位数的串的数目, 需要预处理
题目意思是 再给出的全排列(1~n每个数字只出现一次)中,找到一个奇数个的子串,要求子串的中位数(大小排序后正中间的数), 为M; 求这种子串有多少. 首先要把M这个数左边的串预处理下, 如果 遇到大于M的数ji++,然后记录在data[当前位置的奇偶][当前记录的ji] ,如果当前位置的数小于M的数,ji--; 因为ji记录在数组里,所以ji 要价格50000 以保证不会出现负数的情况. 然后再处理右边的串,ji 重新计数, ans+data[位置奇偶, 如果两个位置奇偶相同,代表这条串有奇数个元原创 2014-08-04 09:53:22 · 1051 阅读 · 0 评论 -
hdu 4870 Rating 高斯消元或者递推
题意:有两个号打cf, 赢的几率是 p ,每次用分数小的打, 赢了+50分,输了扣100分,分数上限2000,下限0.问其中一个号打到2000分的期望。 做法: 把50分作为一个单位分数。 设 dp[i] 为其中 一个号 i分到20分需要打多少盘的期望。 dp[i]=dp[i+1]*p+dp[i-2]*(1-p)+1 当i小于2的时候 因为不可能有负分数,所以 公式为 dp[i]=dp[i+1]*p+dp[0]*(1-p)+1 开始两个号 i i 肯定会打到 i+1 i的情况 , 可以认为一直用一原创 2015-08-10 15:45:15 · 732 阅读 · 0 评论