You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
648 B
C++
24 lines
648 B
C++
#include <cstdio>
|
|
const double eps = 1e-10;
|
|
int n, m, x, y, ans;
|
|
double target, sum[55];
|
|
void dfs(int pos, int cnt, double cur)
|
|
{
|
|
double mx = cur + sum[pos - 1 + n - cnt] - sum[pos - 1];
|
|
double mn = cur + sum[m] - sum[m - (n - cnt)];
|
|
if (mn - target > eps || mx - target < -eps) return;
|
|
if (cnt == n) ans++;
|
|
if (cnt == n || pos == m + 1) return;
|
|
dfs(pos + 1, cnt, cur);
|
|
dfs(pos + 1, cnt + 1, cur + 1.0 / pos);
|
|
}
|
|
int main()
|
|
{
|
|
scanf("%d%d%d%d", &n, &m, &x, &y);
|
|
target = 1.0 * x / y;
|
|
for (int i = 1; i <= m; i++)
|
|
sum[i] = sum[i - 1] + 1.0 / i;
|
|
dfs(1, 0, 0.0);
|
|
printf("%d", ans);
|
|
return 0;
|
|
} |