列表

详情


NC15699. 异或

描述

Cwbc想测试一下他的加密协议,以便防止其他人偷看他给XHRlyb的信。
Cwbc提出了这样一个问题:在区间[a,b]和区间[c,d]中分别等概率随机选择一个整数,两者异或之后等于0的概率是多少?
XHRlyb 一眼就看出了这个题目的答案,但她想让你计算一下这个概率。为了防止精度误差,你只需要输出一个形如a/b的最简分数。特别的,如果概率为0,你需要输出0/1。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!

输入描述

输入数据有多行,每行有四个非负整数a, b, c, d。

输出描述

输出数据应有多行,每行有一个表示答案,形如x/y的最简分数。

示例1

输入:

1 2 3 4

输出:

0/1

示例2

输入:

1 2 2 3

输出:

1/4

原站题解

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

C++(clang++11) 解法, 执行用时: 7ms, 内存消耗: 456K, 提交时间: 2021-04-02 12:22:00

#include<bits/stdc++.h>
#define ll long long
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
int main(){
int a,b,c,d;
while(~scanf("%d%d%d%d",&a,&b,&c,&d)){
ll l=(b<d?b:d)-(a<c?c:a)+1,r=1ll*(b-a+1)*(d-c+1);
l=l<0?0ll:l;
ll g=gcd(l,r);
printf("%lld/%lld\n",l/g,r/g);
}
}

上一题