分类讨论即可

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5005;
const int mod = 998244353;
int i2;
int qpow(int p,int q) {
int b=p,r=1;
while(q>0) {
if(q&1) r*=b;
b*=b;
r%=mod;
b%=mod;
q>>=1;
}
return r;
}
int inv(int x) {
return qpow(x,mod-2);
} struct seg {
int l,r,inv;
int len() {
return r-l+1;
}
seg operator + (const seg &b) {
seg c;
c.l = min(l,b.l);
c.r = max(r,b.r);
return c;
}
seg operator * (const seg &b) {
seg c;
c.l = max(l,b.l);
c.r = min(r,b.r);
return c;
}
bool operator < (const seg &b) {
return (l+r) < (b.l+b.r);
}
} a[N]; struct num {
int x;
num() {
x=0;
}
num(int t) {
x=t;
}
num operator + (const num &b) {
num c;
c.x = x + b.x;
c.x %= mod;
return c;
}
num operator - (const num &b) {
num c;
c.x = x - b.x;
c.x %= mod;
c.x += mod;
c.x %= mod;
return c;
}
num operator * (const num &b) {
num c;
c.x = x * b.x;
c.x %= mod;
return c;
}
num operator / (const num &b) {
num c;
if(b.x==2)
c.x = x * i2;
else
c.x = x * inv(b.x);
c.x %= mod;
return c;
}
num operator / (const seg &b) {
num c;
c.x = x * b.inv;
c.x %= mod;
return c;
}
void operator = (const int &b) {
x = b;
}
void operator = (const num &b) {
x = b.x;
}
num operator + (const int &b) {
num c;
c.x = x + b;
c.x %= mod;
return c;
}
num operator - (const int &b) {
num c;
c.x = x - b;
c.x %= mod;
return c;
}
num operator * (const int &b) {
num c;
c.x = x * b;
c.x %= mod;
return c;
}
num operator / (const int &b) {
num c;
c.x = x * inv(b);
c.x %= mod;
return c;
}
int get() {
return x;
}
}; int n; num calc(seg a,seg b) {
if(a.r<b.l) return num(0);
if(b.r<a.l) return num(1);
if(a.l>=b.l && a.r<=b.r) { //cout<<"A";
return (num(a.l-b.l)+num(a.r-a.l)/num(2))/b;
}
if(b.l>=a.l && b.r<=a.r) { //cout<<"B";
return (num(a.r-b.r)+num(b.r-b.l)/num(2))/a;
}
if(a.l>=b.l && b.r<=a.r) { //cout<<"C";
return num(1)-num(b.r-a.l+1)*num(b.r-a.l+2)/num(2)/b/a;
}
if(b.l>=a.l && a.r<=b.r) { //cout<<"D";
return num(a.r-b.l)*num(a.r-b.l+1)/num(2)/b/a;
}
} num check(seg a,seg b) {
num x;
for(int i=a.l;i<=a.r;i++) {
for(int j=b.l;j<=b.r;j++) {
if(j<i) x=x+1;
}
}
x=x/((a.r-a.l+1)*(b.r-b.l+1));
return x;
} signed main() {
i2=inv(2);
scanf("%lld",&n);
//for(int i=1;i<=n;i++) arrinv[i]=__inv(i);
for(int i=1;i<=n;i++) {
int t1,t2;
scanf("%lld%lld",&t1,&t2);
a[i].l=t1;
a[i].r=t2;
a[i].inv=inv(a[i].r-a[i].l+1);
}
sort(a+1,a+n+1);
num ans = 0;
/*for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
cout<<(calc(a[i],a[j])).get()<<" ";
}
cout<<endl;
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
cout<<(check(a[i],a[j])).get()<<" ";
}
cout<<endl;
}*/ for(int i=2;i<=n;i++) {
for(int j=1;j<i;j++) {
ans = ans + calc(a[j],a[i]);
}
}
cout<<ans.get()<<endl;
}

Wannafly Camp 2020 Day 1A 期望逆序对 - 概率期望的更多相关文章

  1. 计数 luogu 4223 期望逆序对

    https://www.luogu.org/problemnew/show/P4223 期望乘以\(\binom {n}{2}^k\)变成了计数问题 我们考虑每一组数\((A, B)\)产生的贡献CC ...

  2. BZOJ5058 期望逆序对 【矩乘 + 组合数学 + 树状数组】

    题目链接 BZOJ5058 题解 可以发现任意两个位置\(A,B\)最终位置关系的概率是相等的 如果数列是这样: CCCCACCCCBCCCC 那么最终有\(7\)种位置关系 \((A,B)\) \( ...

  3. Wannafly Camp 2020 Day 3I N门问题 - 概率论,扩展中国剩余定理

    有一个猜奖者和一个主持人,一共有 \(n\) 扇门,只有一扇门后面有奖,主持人事先知道哪扇门后有奖,而猜奖者不知道.每一轮,猜奖者选择它认为的有奖概率最大(如果有多个最大,随机选一个)的一扇门,主持人 ...

  4. Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分

    有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...

  5. Wannafly Camp 2020 Day 3D 求和 - 莫比乌斯反演,整除分块,STL,杜教筛

    杜教筛求 \(\phi(n)\), \[ S(n)=n(n+1)/2-\sum_{d=2}^n S(\frac{n}{d}) \] 答案为 \[ \sum_{d=1}^n \phi(d) h(\fra ...

  6. Wannafly Camp 2020 Day 2B 萨博的方程式 - 数位dp

    给定 \(n\) 个数 \(m_i\),求 \((x_1,x_2,...,x_n)\) 的个数,使得 \(x_1 \ xor\ x_2\ xor\ ...\ xor\ x_n = k\),且 \(0 ...

  7. Wannafly Camp 2020 Day 2D 卡拉巴什的字符串 - 后缀自动机

    动态维护任意两个后缀的lcp集合的mex,支持在串末尾追加字符. Solution 考虑在 SAM 上求两个后缀的 LCP 的过程,无非就是找它们在 fail 树上的 LCA,那么 LCP 长度就是这 ...

  8. Wannafly Camp 2020 Day 1D 生成树 - 矩阵树定理,高斯消元

    给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成 ...

  9. Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流

    感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...

随机推荐

  1. C#设计模式学习笔记:(10)外观模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7772184.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第五个模式--外 ...

  2. Electron – 基础学习(3): 项目打包成exe桌面应用 之electron-builder

    前次用 electron-packager 打包成功,这次改用 electron-builder 打包,然后根据项目中实际需要进行选择使用. 第一步:全局安装 electron-builder,便于系 ...

  3. Cesium案例解析(三)——Camera相机

    目录 1. 概述 2. 实例 2.1. Camera.html 2.2. Camera.js 2.2.1. 飞行至某一点 2.2.2. 飞行至某区域 2.2.3. 两地之间飞行 2.2.4. 设置视图 ...

  4. Android中使用Intent的Action和Data属性实现点击按钮跳转到拨打电话和发送短信

    场景 点击拨打电话按钮,跳转到拨打电话页面 点击发送短信按钮,跳转到发送短信页面 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程 ...

  5. 【mysql】索引相关的个人总结

    重点参考: MySQL索引原理及慢查询优化 (美团技术分享网站):原理.示例优化都写的很好. 索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!:原理写的很好. [从入门到入土]令人脱发 ...

  6. mysql必知必会--联 结 表

    联结 SQL最强大的功能之一就是能在数据检索查询的执行中联结(join) 表.联结是利用SQL的 SELECT 能执行的最重要的操作,很好地理解联结 及其语法是学习SQL的一个极为重要的组成部分 外键 ...

  7. Android中动态改变Listview中字体的颜色

    效果如下: 账目显示用的是Listview,要实现的功能为使其根据所在Item是“收入”还是“支出”来把数字设置成绿色或红色 方法是自定义适配器,并重写其中getView()函数,实现如下: //自定 ...

  8. 调整markdown css样式

    H1标题 H2标题 H3标题 H4标题 H5标题 H6标题 段落: 世情薄,人情恶.雨送黄昏花易落.晓风干,泪痕残.欲笺心事,独语斜阑.难,难,难! 人成各,今非昨.病魂常似秋千索.角声寒,夜阑珊.怕 ...

  9. Unity容器实现AOP面向切面编程

    为什么要有AOP 需求总是变化的,比如经常会对一些方法后期增加日志.异常处理.权限.缓存.事务的处理,遇到这种情况我们往往只能修改类. 为了应对变化,我们常常使用设计模式解决,但是也有其局限性:设计模 ...

  10. 在腾讯云上配置.NetCoreWeb

    1.购买服务器 2.远程登录(账号密码在上图铃铛里的消息里) 3.安装iis 3.安装.NetCore相关 下载最新版本.NET Core Windows Server Hosting https:/ ...