0
点赞
收藏
分享

微信扫一扫

HDU 2058 The Sum Problem

程序小小黑 2022-11-09 阅读 80


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]


枚举区间长度即可。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=45000;
int n,f[50005],m,x,y;

int main()
{
for (int i=1;i<=maxn;i++) f[i]=i*(i+1)>>1;
while (~scanf("%d%d",&n,&m),n+m)
{
int u=lower_bound(f+1,f+maxn,m)-f;
for (int i=u;i;i--)
if (2*m%i==0)
{
x=i-1;
y=2*m/i;
if (((x+y)>>1)>n) break;
if ((x+y)%2==0)
{
printf("[%d,%d]\n",(y-x)>>1,(y+x)>>1);
}
}
printf("\n");
}
}



举报

相关推荐

0 条评论