题目描述
天使被释放出来了!真美丽!可是居然同时出现了一个恶魔……很显然这两个东西不能同时存在,于是他们进行决斗,决斗方式如下,两个“人”同时喊出一个[a,b]的数,如果两数差在[0,c]范围内则天使击败恶魔,恶魔将被继续封印!太好了!天使想知道自己有多少几率会赢,以便决定用多少特殊能力增加幸运度。
输入格式
a,b,c
输出格式
一个分数x/y(最简)或一个整数表示,获胜的概率。
样例数据
样例输入
1 3 1
样例输出
3/4
数据范围
获胜几率<1
a,b,c均为整数且大于等于0
a
题目分析
这题是概率中的几何概型,非古典概率使用面积求解
见下图(图画的丑别吐槽)
总共的方案是蓝棕色正方形面积,而棕色是符合条件的方案
计算概率就用正方形面积减去两边的蓝色三角形即可
正方形面积:(b-a)*(b-a)
三角形面积:(b-a-c)*(b-a-c)/2
最后再用一个欧几里得约掉公因数即可
源代码
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
inline const int Get_Int() {
int num=0,bj=1;
char x=getchar();
while(x<'0'||x>'9') {
if(x=='-')bj=-1;
x=getchar();
}
while(x>='0'&&x<='9') {
num=num*10+x-'0';
x=getchar();
}
return num*bj;
}
int a,b,c;
int Gcd(int a,int b) {
if(b==0)return a;
else return Gcd(b,a%b);
}
//画图求解
int main() {
a=Get_Int();
b=Get_Int();
c=Get_Int();
if(c==0) {
putchar('0');
return 0;
}
int x=(b-a)*(b-a),y=x-(b-a-c)*(b-a-c);
int gcd=Gcd(x,y);
x/=gcd;
y/=gcd;
printf("%d/%d\n",y,x);
return 0;
}