标签:mathematics
水题。
题意是说给一个N,M。
在序列: 1,2,3,……,N 中找到连续数列 的和为M。
设序列长度为d.
序列最长,从1 开始。可预知的和为 d*(d-1)/2 <=m 所以 枚举d即可。
#include<cstdio> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<stack> #include<iostream> #include<list> #include<set> #include<cmath> #define INF 0x7fffffff #define eps 1e-6 #define LL long long #define CLRi for(int i=0;i<n;i++) #define CLRj for(int j=0;j<n;j++) #define CLRk for(int k=0;k<n;k++) #define debug puts("==fuck=="); #define acfun std::ios::sync_with_stdio(false) #define Nmax 1001 #define Mmax 1001*1001 using namespace std; int main() { int n,m; while(scanf("%d%d",&n,&m),n||m) { int l,r; int mm=m<<1; int d=(int)sqrt(mm); // cout<<d; while(d>0) { if(mm%d==0) { int tmp=(d-1)*d/2; if((m-tmp)%d==0) { l=(m-tmp)/d; r=l+d-1; printf("[%d,%d]\n",l,r); } } d--; } printf("\n"); } }
标签:mathematics
原文地址:http://blog.csdn.net/dongshimou/article/details/38979609