知识点积累(三)

一、输入外挂

非负整数:

int read()
{
    int c,res ;
    while((c = getchar())<'0' || c>'9');
    res = c-'0';
    while((c = getchar())>='0' && c<='9')
        res = res*10 + c-'0';
    return res ;
}

存在负整数:

int read()
{
    int f=1,c,res;
    while(((c = getchar())<'0' || c>'9') && c!='-');
    c=='-' ? f=res=0 : res=c-'0';
    while((c = getchar())>='0' && c<='9')
        res = res*10 + c-'0';
    return  f ? res : -res ;
}

二、全排列

在做一个题时,给你一个数字让你重新排列,排列后尽量接近该数字且比它小。可以用全排列函数next_permutation( 数组名,数组名 + 个数 ) ; 数组可以是整数也可以是字符串。

HDU 3283 The Next Permutation

三、数学公式

1、点到直线的距离

        假设点(x1,y1)到直线 AX+BY+C=0 ,的距离 d = | Ax1+By1+C | / sqrt( A*A+B*B ) .

2、圆台体积

       圆台的体积公式:V = [ S + S' + sqrt( S * S' ) ] * H / 3 = PI * H * ( R^2 + R*r + r^2 ) / 3 ;

       r - 下底半径    R - 上底半径   H 高

四、HDU 2058   The sum problem

做题感悟:这题曾经向那个方向想过,但是一直没实现。

解题思路:首先计算任何一个所求的序列一定是一个以 1 为公差的等差数列。先求所求数列中最多有多少个数,等差公式:Sn = n *a1+d*n*(n-1) /2 , 因为 d=1 ,且当a1等于1时有最多数,所以 Sn = n*( n+1 ) /2 . Sn *2 = n*( n+1 ) n<=sqrt( Sn*2 ) .知道最多有多少个数,接着依次遍历,看末尾项是否小于 n .

这里总结一下等差公式:设首项为 a1 末项为an 项数为 n 公差为 d 前 n 项和为 Sn .

             Sn=( a1 + an )* n /2          Sn=n*a1 + n*( n-1 )/2 *d        Sn = ( 2 *a1 +( n - 1 )*d ) *n/2          Sn=A*n^2 +B*n  ( A = d/2  B = a1 - d/2 )  

代码~>        

五、HDU 1422 重温世界杯

做题感悟:这题开始看时貌似很难,但是等它激怒了我,我就下定决心一定A掉它,就这样不断的wa,,,最后还是让我AC了,做完才发现这题很简单。

解题思路:这题和球最大连续和的思想差不多,只是这个可以形成环。

代码~>

六、HDU 1721 Bother

做题感悟:这题如果没有提示自己想方法真不好想于是记录一下。

解题思路:我们可以将立方体的8个顶点染成红色和蓝色,要求任意两个相邻的顶点颜色补同。若A,B,C,D的粒子数分别是a,b,c,d,A,C同色,我们可以通过运输将C点的粒子都移到A点(先让A,B同时增加c个粒子,然后将B,C同时减少c个粒子,此时A,B,C,D的粒子为,a+c,b,0,d),这样我们解决这个问题就简单多了。

代码~>

七、期望、方差

           因为方差和期望在比赛时出过,虽然都险过但是想公式想了好久。

期望:即算数平均值 E(X) = ( a1+a2+a3+a4+……an ) / n .

方差:方差是实际值与期望值之差平方的期望值,而标准差是方差算术平方根。在实际计算中,我们用以下公式计算方差。方差是各个数据与平均数之差的平方的和的平均数,即S^2 = 1/n * [ (x1 - x )^ 2 +( x2 - x )^ 2 +(x3 - x ) ^ 2……+( xn - x )^2 ] , 其中,x_表示样本的平均数,n表示样本的数量,xn表示个体,而s^2就表示方差。

八、HDU 2534 Score

做题感悟:这题只想到一点如果 x  y 的最大公约数不是 1 则结果为 Inf ,以为如果 x y 的最大公约数为 z ( z != 1 ) 那么由 x 和 y 组成的数一定是z的倍数。至于那个公式不知道如何推出来,这题应该再忍耐一下说不定就找到规律了。

解题思路:x y 的最大公约数为 1 则为 n*m - n - m  否则 为Inf 。

九、HDU 2529 Shot

数学题 : 借这题总结一下抛物线的公式:v = g*t     h = v * t - 1/2 * g * t ^ 2     v1^2 - v2^ 2 = 2 * g * h    y = a * x^ 2 + b*x + c  (顶点坐标:( - b / ( 2 * a ) , ( 4 * a * c  - b * b ) / ( 4 * a ) )) .  

求抛物线解析式公式:  1 ) 已经知道抛物线上三点( x1 , y1 ) , ( x2 , y2 ) , ( x3 , y3 ) , 设抛物线公式为 y = ax^2 + bx +c  ; 带入三点求三元一次方程,解得 a, b , c 的值。

                                      2 ) 知道抛物线与 x 轴的两个交点 ( x1 ,y1 ) , ( x2, y2 ) ,以及另一点( m , n ) ,设抛物线公式为: y = a*( x - x1 ) * ( x - x2 ) 代入( m, n ) 可以得到 a 的值。

                                      3 ) 已知抛物线经过原点且已知顶点( x1, y1 )坐标求解析式: 设抛物线公式为: y = a*( x - x1 ) ^ 2 + y1 ; 代入 ( 0 , 0 )  求出 a 的值代入即可。 

题目给出 h  x  v  根据公式可得(H 指上升高度并非总高度): 1 )  H = v *sin( rx )  - 1/2 * g * t^2 ;    2 )  x = v*cos( rx ) * t    由 1 )  和 2 ) 得 : H = x * tan( rx ) - 1/2 * g *x^2 *( 1+tan( rx ) )   ( PS : rx  指角度 )    so 最大值为 : ( 4 * a * c  -  b * b ) / ( 4 * a )  ;

代码~>

十、UVA 147 - Dollars

做题感悟:这题一定要注意精度的处理,开始就推出状态方程但是没处理精度一直wa。

解题思路:dp [ i ] 代表花费 i 元钱最多有多少种方案,初始化也要注意 dp[ 0 ] = 1 ,其它均为 0 。

              动态方程:dp [ i ] = dp [ i ] + dp [ i - v ] ; (  V 为相应的钱 )

代码~~>

 

 

 

 

 

 

                   

 

 


 

    

你可能感兴趣的:(知识点积累(三))