zoukankan      html  css  js  c++  java
  • poj 2140 Herd Sums(等差数列)

    题目链接:http://poj.org/problem?id=2140

    题意:给出n,求一共有多少个连续的数满足加和恰好得到n,

    思路:这题想了好久一开始以为是打表找规律,后来才发现与等差数列有关。。。(这题也可以用DP来做)

    根据等差数列求和公式S=(a1+an)*n/2和末项公式an=a1+(n-1)*d(d位公差)得a1=(2*s+n-n*n)/2/n;得出求a1的公式然后对所有的n(n为项数)进行枚举,得出结果

    2*s=(2*a1+n-1)*n,因为2*S必为偶数所以n为偶数或者(2*a1+n-1)为偶数且a1不等于0

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int n,m;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>n;
    
        int N=sqrt(2*n);
        int ans=0;
    
        for(int i=1;i<=N;i++)
        {
            m=(2*n-i*(i-1))/2/i;
            if(2*n==(2*m*i+i*i-i)&&m>0&&(i%2==0||(2*m+i-1)%2==0))
            {
                ans++;
            }
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    SCUT
    模板
    重链剖分
    树的重心
    SCUT
    SCUT
    SCUT
    SCUT
    SCUT
    SCUT
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9010981.html
Copyright © 2011-2022 走看看