zoukankan      html  css  js  c++  java
  • hdu2058 The sum problem(枚举~~等差数列求和公式)

    The sum problem

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 17697    Accepted Submission(s): 5275


    Problem Description
    Given a sequence 1,2,3,......N, your job is to calculate all the possible sub-sequences that the sum of the sub-sequence is M.
     
    Input
    Input contains multiple test cases. each case contains two integers N, M( 1 <= N, M <= 1000000000).input ends with N = M = 0.
     
    Output
    For each test case, print all the possible sub-sequence that its sum is M.The format is show in the sample below.print a blank line after each test case.
     
    Sample Input
    20 10 50 30 0 0
     
    Sample Output
    [1,4] [10,10] [4,8] [6,9] [9,11] [30,30]
     
     
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    #define maxn 1000000
    __int64 N,M;
    int main()
    {
        while(scanf("%I64d%I64d",&N,&M)!=EOF&&N&&M)
        {
            for(__int64 k=(int)sqrt(2*M);k>=1;k--)
            {
                __int64 a1=M/k-(k-1)/2;
                if((2*a1+k-1)*k==2*M)
                {
                    printf("[%I64d,%I64d]
    ",a1,a1+k-1);
                }
            }
            printf("
    ");
        }
        return 0;
    }
    //根据等差数列求和,m=(2*a1+k-1)*k/2,k表示数列的项数,a1表示首项。
    //枚举k(1<=k<=sqtrt(m)) 
  • 相关阅读:
    常用网络操作命令
    C语言中的位域[转]
    状态机——一种强大的思想利器
    9030PCI CAN驱动开发点滴
    驱动开发中应该注意的事项
    java 从网络Url中下载文件
    windows pyspider 爬虫安装
    java list去重
    Java 文件分块及合并
    工程部署到linux
  • 原文地址:https://www.cnblogs.com/qianyanwanyu--/p/4378373.html
Copyright © 2011-2022 走看看