分类讨论即可

#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. Myeclipse maven项目转web项目

    右键点击项目,选择project facets,或者在properties选择,点“Convert to faceted from...” 勾选java和Dynamic Web Module 选项 接 ...

  2. C#实现的一些常见时间格式

    string aa = DateTime.Now.ToShortDateString();//"2019/9/23" string bb = DateTime.Now.ToShor ...

  3. svn cleanup 失败问题解决

    将sqlite3.exe放到.svn的同级目录 4.启动cmd执行sqlite3 .svn/wc.db "select * from work_queue" 5.启动cmd执行sq ...

  4. Kafka消费者没有收到通知的分析

    今天遇到两位三方人员跟我反馈,某微服务的异步接口功能不正常了,由于该异步接口采用Kafka异步消息的方案,对方说没有收到Kafka给消费者的通知,根据此问题,联系了相关人员进行了分析: (一)明确环境 ...

  5. asp.net mvc 使用AuthorizeAttribute做授权验证

    授权验证,比如登陆验证 1.自定义属性继承AuthorizeAttribute 2.重写OnAuthorization方法 3.通过AllowAnonymousAttribute特性处理无需授权的Ac ...

  6. Anaconda 包管理与环境管理

    包管理命令 conda命令 安装包 conda install 包名称 卸载包 conda remove 包名称 更新包 conda update 包名称 模糊查询 conda search 包名称 ...

  7. C# convert json to datatable,convert list to datatable

    static DataTable ConvertJsonToTable(string jsonValue) { DataTable dt = (DataTable)JsonConvert.Deseri ...

  8. 灵活运用SQL Server2008 SSIS变量

      在SSIS开发ETL(Extract-Transform-Load),数据抽取.转换.装载的过程.我们需要自己定义变量 一.SSIS变量简介 SSIS(SQL Server Integration ...

  9. 双向队列 SDUT 1466

    题目描述      想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首:两头都可以做出队,入队的操作.现在给你一系列的操作,请输出最后队列的状态:命令格式:LIN X  X表示一 ...

  10. 使用SMTP协议发送邮件

    class Program { static void Main(string[] args) { ) { try { inputmodel obj = new inputmodel(args); S ...