列表

详情


NC21602. 出题人的女装

描述

出题人早上起床就打算穿衣服,他有两箱衣服,因为懒,他在这两天只打算打开一个箱子.
两个箱子中一个有n件衣服,其中有x件女装,另一个有m件衣服,其中有y件女装.
出题人在第一天随机挑一个箱子后,接下来的两天就会从此箱子中随机找一件衣服穿.

又因为出题人懒而且很有钱,所以他穿完衣服后不会去洗,而是直接扔进垃圾桶,也不会放回原来的箱子.

已知出题人第1天穿了女装,求他第二天依然穿女装的概率

输入描述

第一行包含5个整数n,m,x,y,t

输出描述

若t=0,则在第一行输出概率(四舍五入保留小数点后3位,概率为0输出0.000,概率为100%输出1.000)
若t=1,则在第一行输出概率(最简分数形式,概率为0输出0/1,概率为100%输出1/1)

示例1

输入:

10 10 8 8 1

输出:

7/9

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 404K, 提交时间: 2020-01-23 12:27:23

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	double x,y,n,m;
	cin>>n>>m>>x>>y>>t;
	long long int  num1=x*(x-1)*m*(m-1)+y*(y-1)*n*(n-1);
	long long int  num2=(n-1)*(m-1)*(m*x+n*y);
	
	if(t==0)
	{
	
	printf("%.3lf\n",1.0*num1/num2);
}
	else
	{
	    cout<<num1/__gcd(num1,num2)<<"/"<<num2/__gcd(num1,num2)<<endl;
	}
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 492K, 提交时间: 2019-01-18 22:21:12

#include<bits/stdc++.h>
int main()
{
	long long n,m,x,y,t,a,b;
	scanf("%lld%lld%lld%lld%lld",&n,&m,&x,&y,&t);
	a=(x*x-x)*(m-1)*m+(y*y-y)*(n-1)*n;
	b=(n-1)*(m-1)*(m*x+n*y);
	if(t)
		printf("%lld/%lld\n",a/std::__gcd(a,b),b/std::__gcd(a,b));
	else
		printf("%.3lf\n",1.0*a/b);
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 30ms, 内存消耗: 3432K, 提交时间: 2019-02-05 23:03:46

def gcd(a,b):
    if b:
        return gcd(b,a%b)
    else:
        return a
n,m,x,y,t=map(int,input().strip().split())
fz=x*(x-1)*m*(m-1)+y*(y-1)*n*(n-1)
fm=m*x*(m-1)*(n-1)+n*y*(n-1)*(m-1)
if t:
    g=gcd(fz,fm)
    print(int(fz/g),'/',int(fm/g),sep='')
else:
    print('%.3f'%(fz/fm))

上一题