فساد شرکتی به تازگی افشا شده است! مردم برای اعتراض به عملکرد این شرکت، رو به روی ساختمان آن تجمع کردهاند. جمعی از اغتشاشگران هم در این میان قصد دارند سنگ به سمت ساختمان شرکت پرتاب کنند! ساختمان شرکت دارای $k$ پنجره است که $h$ تا از آنها دو جداره (به پهنای دو شیشه) و بقیه یک جدارهاند. صاحبان شرکت $m$ نفر استخدام کردند و به هر کدام یک شیشه دادند تا یکی از پنجرهها را مقاومتر کنند. دقت کنید قدرت هر پنجره به هر مقدار میتواند افزایش یابد و شیشهی آن $x$ جداره شود. هریک از این $m$ نفر، به طور تصادفی و بدون توجه به انتخاب دیگران یا تعداد شیشههای هر پنجره، یک پنجره را انتخاب کرده و آن را مقاومتر میکند.
سپس هر یک از $n$ اغتشاشگر نیز، به طور تصادفی و بدون توجه به انتخاب دیگران یا تعداد شیشههای هر پنجره، یک پنجره را انتخاب کرده و سنگی به سمت آن پرتاب میکند. درنتیجه یکی از شیشههای آن پنجره را میشکند. اگر تمام شیشههای حداقل یک پنجره بشکند ساختمان ناامن میشود. برنامهای بنویسید که احتمال امن ماندن ساختمان را محاسبه کند.
در این سوال شما باید توابع زیر را پیادهسازی کنید:
void initProgram()
این تابع دقیقا یکبار پیش از اجرای تمامی موارد آزمون صدا زده میشود. از آن برای انجام پیشپردازشها(در صورت وجود) استفاده کنید.
double getProbability(int k, int n, int m, int h)
این تابع در هر مورد آزمون یکبار صدا زده میشود و باید احتمال امن ماندن ساختمان را با توجه به پارامترهای ورودی برگرداند.
ارزیاب نمونه ورودی را به صورت زیر میخواند:
در خط اول عدد $t$، تعداد موارد آزمون آمده است. سپس به ازای هر مورد آزمون یک خط آمده است که در آن به ترتیب چهار عدد $k$، $n$، $m$ و $h$ آمده است.