zoukankan      html  css  js  c++  java
  • hdu2058

    The sum problem

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


    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]
     
    分析:设满足条件的区间为[a,a+k-1],那么M=a+(a+1)+......+(a+k-1)=k*a+k*(k-1)/2,
    然后枚举k,算出a,记录结果。
     
    #include<cstdio>
    long long a[1000000],num[1000000];
    int main()
    {
        long long N,M;
        while(scanf("%lld%lld",&N,&M))
        {
            if(!N&&!M) break;
            int cnt=0;
            long long k=1,temp;
            while(true)
            {
                temp=M-k*(k-1)/2;
                if(temp<=0) break;
                if(temp%k==0&&temp/k+k-1<=N)
                {num[cnt]=k-1;a[cnt++]=temp/k;}
                k++;
            }
            for(int i=cnt-1;i>=0;i--)
            printf("[%lld,%lld]
    ",a[i],a[i]+num[i]);
            printf("
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Markdown学习笔记
    Go 学习笔记(一)
    case中定义变量
    <转>MySql 与Oracle区别
    Java 时间转换问题总结
    线程之间共享
    并发编程快速入门
    redis主从复制
    jedis操作redis
    redis持久化方案
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8724130.html
Copyright © 2011-2022 走看看