链接

点击跳转

题解

第一次接触这种类型的题目

把计数题当成期望题来做

算出期望,再乘以总方案数,就得到了符合条件的方案数

先假设所有的bib_ibi​都不同**

假设一本书,不小于他的有kik_iki​个,那么在这kik_iki​本的相对顺序没有约束的情况下,这本书产生贡献的概率就是 “总情况数”×1ki\times \frac{1}{k_i}×ki​1​

现在考虑bib_ibi​有重复

按照bib_ibi​分类,相同的分到一组,每组从小到大排序

假设每组中aia_iai​都互不相同

第一本书产生贡献的概率是1k2\frac{1}{k_2}k2​1​

第二本书想要产生贡献,就必须要让第一本书不能产生贡献,所以概率是(1−1k1)1k2(1-\frac{1}{k_1}) \frac{1}{k_2}(1−k1​1​)k2​1​。这样为啥是对的呢,因为实际上(1−1k1)(1-\frac{1}{k_1})(1−k1​1​)是限制了第一本书和比他大的书之间的相对关系,但是第222本书和比他大的书之间任何两本的相对顺序没有被限制,所以概率还是1k2\frac{1}{k_2}k2​1​。

如果aia_iai​有重复怎么办呢

考虑a1=a2a_1=a_2a1​=a2​的情况,这个咋办呢

先算了第一本书造成贡献的概率为1k1\frac{1}{k_1}k1​1​,那么(1−1k1)(1-\frac{1}{k_1})(1−k1​1​)也就代表第一本书必定要排在第二本书的后面,这个时候(1−1k1)1k2(1-\frac{1}{k_1})\frac{1}{k_2}(1−k1​1​)k2​1​就不能代表第二本书产生贡献的概率,因为在固定了前两本书的相对顺序之后,第二本书排在第一位的概率不再是1k2\frac{1}{k_2}k2​1​

但是转念一想,我要算的不是第222本书排在k2k_2k2​本书的第一本的情况吗,既然(1−1k1)(1-\frac{1}{k_1})(1−k1​1​)这个概率本身含有了“第一本书在第二本书的后面”的意思,岂不是说我就不用管第一本书了,那么这种情况下第二本书产生贡献的概率就成了1k2−1\frac{1}{k_2-1}k2​−11​

至此,问题已全部解决

代码

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define iinf 0x3f3f3f3f
#define linf (1ll<<60)
#define eps 1e-8
#define maxn 1000010
#define maxe 1000010
#define cl(x) memset(x,0,sizeof(x))
#define rep(_,__) for(_=1;_<=(__);_++)
#define em(x) emplace(x)
#define emb(x) emplace_back(x)
#define emf(x) emplace_front(x)
#define fi first
#define se second
#define de(x) cerr<<#x<<" = "<<x<<endl
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ll read(ll x=0)
{ll c, f(1);for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;for(;isdigit(c);c=getchar())x=x*10+c-0x30;return f*x;
}
struct EasyMath
{ll prime[maxn], phi[maxn], mu[maxn];bool mark[maxn];ll fastpow(ll a, ll b, ll c){ll t(a%c), ans(1ll);for(;b;b>>=1,t=t*t%c)if(b&1)ans=ans*t%c;return ans;}void shai(ll N){ll i, j;for(i=2;i<=N;i++)mark[i]=false;*prime=0;phi[1]=mu[1]=1;for(i=2;i<=N;i++){if(!mark[i])prime[++*prime]=i, mu[i]=-1, phi[i]=i-1;for(j=1;j<=*prime and i*prime[j]<=N;j++){mark[i*prime[j]]=true;if(i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}mu[i*prime[j]]=-mu[i];phi[i*prime[j]]=phi[i]*(prime[j]-1);}}}ll inv(ll x, ll p)  //p是素数{return fastpow(x%p,p-2,p);}
}em;
vector<pll> v;
map<ll,ll> tb;
vector<ll> lis[maxn], w, p;
#define mod 998244353ll
int main()
{ll n, a, b, i, tot=0, ans=0;n=read();rep(i,n){a=read(), b=read();v.emb( pll(b,a) );if(tb.find(b)==tb.end())tb[b]=++tot;}sort(v.begin(),v.end());for(auto pr:v){lis[tb[pr.first]].emb(pr.second);w.emb(pr.second);}sort(w.begin(),w.end());rep(i,tot){ll s=0;ll cnt=0, last=-1;for(auto x:lis[i]){if(x==last)cnt++;else cnt=0;last=x;ll t=(w.end()-lower_bound(w.begin(),w.end(),x)-cnt), p=(1-s)*em.inv(t,mod)%mod;(s+=p)%=mod;}(ans+=s)%=mod;}rep(i,n)(ans*=i)%=mod;printf("%lld",(ans+mod)%mod);return 0;
}

nowcoder20619 禁书目录相关推荐

  1. 笛卡尔生平及其成就介绍

    笛卡尔 (法国哲学家,数学家和科学家) 编辑 讨论20 上传视频 勒内·笛卡尔(René Descartes,1596年3月31日-1650年2月11日),1596年3月31日生于法国安德尔-卢瓦尔省 ...

  2. 关于我的奇怪码风以及定义乱七八糟变量的意义

    文章目录 前言 码风 变量 尾声 前言 我码风非常奇怪,在主函数中一直是顶格的,以前是whitesmithwhitesmithwhitesmith,现在是bannerbannerbanner. 还有我 ...

  3. 最全知乎专栏合集:爬取11088个知乎专栏,打破发现壁垒(编程、python、爬虫、数据分析..)

    最近逛博客,看到一篇很好的文章,整合了知乎上所有优秀的编程.算法专栏,对学习的帮助非常大,转载过来分享给大家: 众所周知,知乎官方没有搜素专栏的功能,于是我通过爬取几十万用户个人主页所关注的专栏从而获 ...

  4. Wannafly挑战赛26题解

    为啥混进了几道不是魔禁的题--出题人太不敬业了-- 传送门 \(A\) 御坂网络 为啥没有番外个体和整体意志呢 暴力模拟就好了,这个要是都打错我干脆滚回去学文化课算了 //minamoto #incl ...

  5. Wannafly挑战赛26 题解

    Wannafly挑战赛26 题目连接 https://www.nowcoder.com/acm/contest/212#question A. 御坂网络 枚举圆心所在的位置, O ( n ) O(n) ...

  6. 《哲学家们都干了些什么》读书笔记

    注:为了使得联系上下文,我以括号"()"或破折号"--"的形式加上了我自己的注释. 关于回答"上帝是全能的,既然知道亚当和夏娃偷吃禁果,为什么一开始不 ...

  7. 最全知乎专栏合集:编程、python、爬虫、数据分析、挖掘、ML、NLP、DL...

    上一篇文章<爬取11088个知乎专栏,打破发现壁垒>里提到,知乎官方没有搜素专栏的功能,于是我通过爬取几十万用户个人主页所关注的专栏从而获取到11088个知乎专栏. 本回筛选出其中涉及:编 ...

  8. http://blog.csdn.net/neiloid/article/details/7037093#

    1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器): androi ...

  9. 达芬奇的这本“禁书”,竟让全世界顶礼膜拜了 500 年!

    转自:http://36kr.com/p/5100305.html 15 分钟,带你精读全球传记写作一哥的重磅新作<达芬奇传>. 编者按:本文来自微信公众号"远读重洋" ...

最新文章

  1. linux history 命令 shell历史记录显示 HISTSIZE
  2. 笔记-高项案例题-2015年上-进度管理-质量管理
  3. 可视化组织内的基因表达
  4. android auto错位,recyclerview 的item布局错乱
  5. Java中类的初始化顺序
  6. ArcGIS For Flex学习之Mapping---Map Extent and Mouse Coordinates
  7. [日常] 最近的一些破事w...
  8. Delphi程序开启XP的ClearType显示效果
  9. centos未能加载虚拟光盘 C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions
  10. sohutv cachecloud启动
  11. 穿越东西冲、感受户外、爱上运动
  12. python抢课_一个用python实现的东方时尚(驾校)抢课程序
  13. java正则判断银行卡号,验证银行卡号正则
  14. Xcode6中使用iOS7 SDK的方法
  15. 2.4 线性丢番图方程
  16. java计算机毕业设计ssm+vue心理咨询网站
  17. 关于word不能存档解决办法
  18. 计算机网络之面试常考
  19. 基于Python的线性回归预测模型介绍及实践
  20. html内嵌式的语言,为何说PHP是一种HTML内嵌式的语言

热门文章

  1. Qt5 和 OpenCV4 计算机视觉项目:1~5
  2. 3.7V转1.5V超简单的LDO芯片
  3. 3.Android学习之常用UI组件(一)
  4. 程序员开发常用英语词汇汇总,满满的干货!
  5. sa6155p以太网卡驱动emac-dwc-eqos
  6. 硬件测试的思考和改进:有道词典笔的高效测试探索
  7. php识别名片,名片识别接口
  8. 用python把数据画成饼状图_Python学习第92课——数据可视化之饼状图绘制
  9. git、gitlab+jenkens版本控制的安装、升级与灾备
  10. 得意不张狂失败不气妥