soj 1218 纪念邮票

来源:互联网 发布:tensorflow中文手册 编辑:程序博客网 时间:2024/06/09 21:26

现在弱爆了。。。每次刷题都有一种开启逗比模式的感觉。。。

题意说给定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;}


0 0