这题卡了我蛮久的qwq
其实就是一个暴力+前缀和剪枝
/**************************************************************
Problem: 1224
User: syh0313
Language: C++
Result: Accepted
Time:6372 ms
Memory:1288 kb
****************************************************************/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using
namespace
std;
const
double
eps=1e-10;
int
n,m,ans;
double
a,b,num,sum[60];
void
dfs(
int
x,
int
cnt,
double
now)
{
if
(num-(now+sum[x+n-cnt-1]-sum[x-1])>eps)
return
;
if
(now+sum[m]-sum[m-(n-cnt)]-num>eps)
return
;
if
(
abs
(now-num)<eps) {ans++;
return
;}
if
(cnt==n &&
abs
(now-num)<eps) {ans++;
return
;}
if
(x>m)
return
;
dfs(x+1,cnt+1,now+1.0/(
double
)x);
dfs(x+1,cnt,now);
}
int
main()
{
scanf
(
"%d%d%lf%lf"
,&n,&m,&a,&b); num=a/b;
for
(
int
i=1;i<=m;i++) sum[i]=sum[i-1]+1.0/(
double
)i;
dfs(1,0,0.0);
printf
(
"%d\n"
,ans);
return
0;
}