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 }
  • 相关阅读:
    springboot(十二)-分布式锁(redis)
    springboot(十一)-为什么要用springboot
    HashMap和HashTable区别
    ArrayList和LinkedList区别
    springcloud(三)-Eureka
    springboot(十)-监控应用
    springboot(九)-log配置
    springcloud(二)-最简单的实战
    rest版的webservice
    sqlite与android交互 (封装)
  • 原文地址:https://www.cnblogs.com/inmoonlight/p/5166284.html
Copyright © 2011-2022 走看看