有些匪夷所思的题目。。注释部分加上就WA,不加就AC。。
推公式,因为$$C(n,k) = C(n,k-1) * (n-k+1)/k$$
所以$$ans = \frac{C(n, k)}{C(r, s)}\qquad$$改成递推即可。
#include <bits/stdc++.h> using namespace std; // 大数,内存处理 #define INF 0x3f3f3f3f #define ll long long int #define MEM(a) memset(a, 0, sizeof(a)) #define MEMM(a) memset(a, -1, sizeof(a)) #define DEB(x, n) cout << (x) << " " << (n) << endl #define FOR(i, s, e) for(int (i) = (s); (i) < (e); (i)++) const double PI = acos(-1.0); #define CR printf("\n") // 调试用 template <class Type> void debug(Type a[], int len) { for(int i = ; i < len ; i++) { cout << a[i] << " "; } cout << endl; } int main() { #ifdef DEBUG freopen("input", "r", stdin); //从input文件中读入 // freopen("output", "w", stdout); //输出到output文件 #endif int p, q, r, s; double ans = 1.0; while(scanf("%d%d%d%d", &p, &q, &r, &s) != EOF) { ans = 1.0; // if(p - q > q) q = p - q; // if(r - s > s) s = r - s; for(int i = 1; i <= q || i <= s; i++) { if(i <= q) ans = ans * (p-i+1) / i; if(i <= s) ans = ans * i / (r-i+1); } printf("%.5lf\n", ans); } return ; }