The sum problem(高斯公式)
阿新 • • 發佈:2019-02-19
The sum problem
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 22089 Accepted Submission(s): 6508
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]
Author 8600
Source
高斯公式的應用,如果暴力會超時。
題解:
程式碼如下:
#include <cstdio> #include <cmath> #include <algorithm> using namespace std; int main() { long long n,m; long long a,b; while (~scanf("%lld %lld",&n,&m) && (n || m)) { for (int i = sqrt((double)(2*n)) ; i > 0 ; i--) { if ((2 * m) % i == 0 && ((2 * m / i) + i - 1) % 2 == 0) { a = ((2 * m / i) + i - 1) / 2; b = 2 * m / i - a; if (a > b) swap(a,b); if (a > 0) printf ("[%d,%d]\n",a,b); } } printf ("\n"); } return 0; }