• 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)) 
  • 相关阅读:
    Git常用命令整理
    JavaScript常用代码书写规范
    程序猿常用英语单词汇总
    15个常用的javaScript正则表达式
    [Java复习] 服务注册中心 (Eureka, Zookeeper)
    [Java复习] 面试突击
    [Java复习] 面试突击
    [Java复习] 面试突击
    [Java复习] Spring Cloud
    [Java复习] 微服务
  • 原文地址:https://www.cnblogs.com/qianyanwanyu--/p/4378373.html
Copyright © 2020-2023  润新知