现在弱爆了。。。每次刷题都有一种开启逗比模式的感觉。。。
题意说给定n,m(<= 10^9),从1-n中选出连续的区间[a,b]满足a--b区间所有数的和等于m,把所有满足这些的区间都找出来。
看到10^9,第一反应开根号。。。但是神奇的把sqrt(m)->m这块区间想像的特别小,然后开始枚举这块。。。
思路:等差数列,枚举区间大小x,区间总和就为Sn = x*a1 + x*(x-1)/2,领Sn=m。解出来a1就行。。。。
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main()
{
int n, m;
while(~scanf("%d%d", &n, &m)) {
//cout << n << " " << m << endl;
int mm = sqrt(2*m), i;
//long long sum = mm*(mm+1)/2;
//printf("[%d,%d]\n", 0, m);
for(i = min(n, mm); i >= 1; --i) {
int t = m - i*(i-1)/2;
if(t%i == 0) {
if(t/i > n || t/i + i - 1 > n) continue;
printf("[%d,%d]\n", t/i, t/i + i - 1);
}
}
}
return 0;
}