NC21602. 出题人的女装
描述
又因为出题人懒而且很有钱,所以他穿完衣服后不会去洗,而是直接扔进垃圾桶,也不会放回原来的箱子.
输入描述
第一行包含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))