zoukankan      html  css  js  c++  java
  • HDU 2058 The sum problem

    The sum problem

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


    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]
     
     
     
    解析:直接枚举会超时,因此枚举时要缩小范围。根据等差求和公式Sn = n*a+n*(n-1)/2*d,
    此处Sn = m,d = 1,则m = n*a1+n*(n-1)/2。整理得2*m = n*n+(2*a1-1)*n。可得:
    n<sqrt(2.0*m)。
     
     
     
     1 #include <cstdio>
     2 #include <cmath>
     3 
     4 int n,m;
     5 
     6 int main()
     7 {
     8     while(scanf("%d%d",&n,&m), n){
     9         for(int num = (int)sqrt(m*2.0); num>0; --num){
    10             int numa1 = m-num*(num-1)/2;
    11             if(numa1%num == 0)
    12                 printf("[%d,%d]
    ",numa1/num,numa1/num+num-1);
    13         }
    14         printf("
    ");
    15     }
    16     return 0;
    17 }
  • 相关阅读:
    Hdu 1257 最少拦截系统
    Hdu 1404 Digital Deletions
    Hdu 1079 Calendar Game
    Hdu 1158 Employment Planning(DP)
    Hdu 1116 Play on Words
    Hdu 1258 Sum It Up
    Hdu 1175 连连看(DFS)
    Hdu 3635 Dragon Balls (并查集)
    Hdu 1829 A Bug's Life
    Hdu 1181 变形课
  • 原文地址:https://www.cnblogs.com/inmoonlight/p/5166284.html
Copyright © 2011-2022 走看看