# [NOI2019] 斗主地 洛谷黑题题解

[NOI2019] 斗主地

题目背景

时限 4 秒 内存 512MB

题目描述

小 S 在和小 F 玩一个叫“斗地主”的游戏。

可怜的小 S 发现自己打牌并打不过小 F,所以他想要在洗牌环节动动手脚。

一副牌一共有 n n n 张牌,从上到下依次标号为 1 ∼ n 1 \sim n 1n。标号为 i i i 的牌分数 f ( i ) f(i) f(i)。在本题, f ( i ) f(i) f(i) 有且仅有两种可能: f ( i ) = i f(i) = i f(i)=i f ( i ) = i 2 f(i) = i^2 f(i)=i2

洗牌的方式和我们日常生活中的比较类似,以下我们用形式化的语言来定义: 洗牌环节一共分 m m m 轮,这 m m m 轮洗牌依次进行。第 i i i 轮洗牌时:

  1. 小 S 会拿出从最上面往下数的前 A i A_i Ai 张牌。这样这副牌就被分成了两堆:第一堆 是最上面的 A i A_i Ai 张牌,第二堆是剩下的 n − A i n-A_i nAi 张牌,且这两堆牌内相对顺序不变。 特别地,当 A i = n A_i = n Ai=n A i = 0 A_i = 0 Ai=0 时,有一堆牌是空的。
  2. 接下来对两堆牌进行合并,从而产生新的第三堆牌。当第一堆牌还剩下 X X X 张,第二堆牌还剩下 Y Y Y 张的时候,以 X X + Y \dfrac{X}{X+Y} X+YX 的概率取出第一堆牌的最下面的牌,并将它 放入新的第三堆牌的最上面, Y X + Y \dfrac{Y}{X+Y} X+YY 的概率取出第二堆牌的最下面的牌,并将它放入新的第三堆牌的最上面
  3. 重复操作 2 2 2,一直取到两堆牌都为空为止。这样我们就完成了一轮洗牌。

因为洗牌过程是随机的,所以小 S 发现自己没法知道某个位置上具体是哪张牌。但小 S 想问你在经历了这 m m m 轮洗牌后,某个位置上的牌的期望分数是多少。小 S 一共会问你 Q Q Q 个这样的问题。

输入格式

输入的第一行包含三个正整数 n , m , t y p e n, m, type n,m,type,分别表示牌的数量,洗牌的轮数与 f ( i ) f(i) f(i) 的类型。当 t y p e = 1 type = 1 type=1 时, f ( i ) = i f(i) = i f(i)=i。当 t y p e = 2 type = 2 type=2 时, f ( i ) = i 2 f(i) = i^2 f(i)=i2

接下来一行,一共 m m m 个整数,表示 A 1 ∼ A m A_1 \sim A_m A1Am

接下来一行一个正整数 Q Q Q,表示小 S 的询问个数。 接下来 Q Q Q 行,每行一个正整数 c i c_i ci,表示小 S 想要知道从上往下第 c i c_i ci 个位置上的牌的期望分数

保证 1 ≤ c i ≤ n 1 \leq c_i \leq n 1cin

输出格式

输出一共 Q Q Q 行,每行一个整数,表示答案在模 998244353 998244353 998244353 意义下的取值。

即设答案化为最简分式后的形式为 a b \dfrac{a} {b} ba,其中 a a a b b b 互质。输出整数 x x x 使得 b x ≡ a ( m o d 998244353 ) bx \equiv a \pmod{998244353} bxa(mod998244353) 0 ≤ x < 998244353 0 ≤ x < 998244353 0x<998244353。可以证明这样的整数 x x x 是唯一的。

样例 #1

样例输入 #1

4 1 1
3
1
1

样例输出 #1

249561090

提示

更多样例

您可以通过附加文件获得更多样例。

样例 2

见附加文件中的 landlords/landlords2.inlandlords/landlords2.ans

样例 3

见附加文件中的 landlords/landlords3.inlandlords/landlords3.ans

样例输入输出 1 解释

  • 1 4 \dfrac{1}{4} 41 的概率从上到下的最终结果是 { 1 , 2 , 3 , 4 } \{1, 2, 3, 4\} {1,2,3,4}
  • 1 4 \dfrac{1}{4} 41 的概率从上到下的最终结果是 { 1 , 2 , 4 , 3 } \{1, 2, 4, 3\} {1,2,4,3}
  • 1 4 \dfrac{1}{4} 41 的概率从上到下的最终结果是 { 1 , 4 , 2 , 3 } \{1, 4, 2, 3\} {1,4,2,3}
  • 1 4 \dfrac{1}{4} 41 的概率从上到下的最终结果是 { 4 , 1 , 2 , 3 } \{4, 1, 2, 3\} {4,1,2,3}

所以最终有 1 4 \dfrac{1}{4} 41 的概率第一个位置是 4 4 4,有 3 4 \dfrac{3} {4} 43 的概率第一个位置是 1 1 1,所以第一个位置的期望分数是 7 4 \dfrac{7}{ 4} 47

为了帮助你们更直观地了解洗牌的过程,我们在下面画出了结果是 { 1 , 4 , 2 , 3 } \{1, 4, 2, 3\} {1,4,2,3} 的过程。

数据规模与约定

对于全部的测试点,保证 3 ≤ n ≤ 1 0 7 3\le n \le 10^7 3n107 1 ≤ m , Q ≤ 5 × 1 0 5 1\le m,Q\le5\times 10^5 1m,Q5×105 0 ≤ A i ≤ n 0\le A_i\le n 0Ain t y p e ∈ { 1 , 2 } type\in \{1,2\} type{1,2}

每个测试点的具体限制见下表:

测试点 n n n m m m t y p e = type= type=其他性质
1 1 1 ≤ 10 \le 10 10 ≤ 1 \le 1 1 1 1 1
2 2 2 ≤ 80 \le 80 80 ≤ 80 \le 80 80 1 1 1
3 3 3 ≤ 80 \le 80 80 ≤ 80 \le 80 80 2 2 2
4 4 4 ≤ 100 \le 100 100 ≤ 5 × 1 0 5 \le 5\times 10^5 5×105 2 2 2所有 A i A_i Ai 相同
5 5 5 ≤ 1 0 7 \le 10^7 107 ≤ 5 × 1 0 5 \le 5\times 10^5 5×105 1 1 1
6 6 6 ≤ 1 0 7 \le 10^7 107 ≤ 5 × 1 0 5 \le 5\times 10^5 5×105 1 1 1
7 7 7 ≤ 1 0 7 \le 10^7 107 ≤ 5 × 1 0 5 \le 5\times 10^5 5×105 1 1 1
8 8 8 ≤ 1 0 7 \le 10^7 107 ≤ 5 × 1 0 5 \le 5\times 10^5 5×105 2 2 2
9 9 9 ≤ 1 0 7 \le 10^7 107 ≤ 5 × 1 0 5 \le 5\times 10^5 5×105 2 2 2
10 10 10 ≤ 1 0 7 \le 10^7 107 ≤ 5 × 1 0 5 \le 5\times 10^5 5×105 2 2 2

请注意我们并没有保证 Q ≤ n Q\le n Qn

提示

这里我们给出离散型随机变量 X X X 的期望 E [ x ] \mathbb{E}[x] E[x] 的定义:

设离散随机变量 X X X 的可能值是 X 1 , X 2 , … X k X_1,X_2,\ldots X_k X1,X2,Xk P r [ X 1 ] , P r [ X 2 ] , … , P r [ X k ] Pr[X_1],Pr[X_2],\ldots,Pr[X_k] Pr[X1],Pr[X2],,Pr[Xk] X X X 取对应值的概率,则 X X X 的期望为:
E [ x ] = ∑ i = 1 k X i × P r [ X i ] \mathbb{E}[x]=\sum^k_{i=1}X_i\times Pr[X_i] E[x]=i=1kXi×Pr[Xi]

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int kcz=998244353;
const int maxn=10000005;
ll a,b,c,f[maxn];
int n;
inline ll qpow(ll a,ll k)
{ll res=1;while(k){if(k&1) res=res*a%kcz;if(k>>=1) a=a*a%kcz;}return res;
}
inline ll calc(ll x) { return ((a*x+b)%kcz*x+c)%kcz; } // 算第x个数的期望
int main()
{int m,tp,i;ll _,__,t1,t2,t3,t,___,sqn;freopen("landlords.in","r",stdin),freopen("landlords.out","w",stdout);scanf("%d%d%d",&n,&m,&tp),sqn=n*(ll)n%kcz;_=qpow(n-1,kcz-2),__=qpow(n,kcz-2),___=qpow((-sqn+3*n-2)%kcz,kcz-2);if(tp==1) a=c=0,b=1;else a=1,b=c=0; // x_i=ai^2+bi+cwhile(m--){scanf("%lld",&t);if(t==0 || t==n) continue;t1=(calc(1)*t+calc(t+1)*(n-t))%kcz*__%kcz; // 第一个t2=((calc(2)*(t-1)+calc(t+1)*(n-t))%kcz*t+(calc(1)*t+calc(t+2)*(n-t-1))%kcz*(n-t))%kcz*__%kcz*_%kcz; // 第二个t3=(calc(t)*t+calc(n)*(n-t))%kcz*__%kcz; // 第n个a=((2-n)*t1+(n-1)*t2-t3)%kcz*___%kcz;b=((sqn-4)*t1+(1-sqn)*t2+3*t3)%kcz*___%kcz;c=((4*n-2*sqn)*t1+(sqn-n)*t2-2*t3)%kcz*___%kcz; // 极其丑的差值}for(i=1;i<=n;i++)f[i]=(calc(i)+kcz)%kcz;scanf("%d",&m);while(m--)scanf("%lld",&t),printf("%lld\n",f[t]);fclose(stdin),fclose(stdout);return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int kcz=998244353;
const int maxn=10000005;
ll a,b,c,a_,b_,c_,fac[maxn],inv[maxn],inv_fac[maxn];
int n;
inline ll f(ll x) { return (a+b*(x-1)+c*(x-1)%kcz*(x-2))%kcz; } // 算第x个数的期望
inline ll C(int n,int m) { return (m>=0 && m<=n)?fac[n]*inv_fac[m]%kcz*inv_fac[n-m]%kcz:0; } // 判一下0的情况
inline ll invC(int n,int m) { return inv_fac[n]*fac[m]%kcz*fac[n-m]%kcz; }
int main()
{int i,q,op,A;ll t;freopen("landlords.in","r",stdin),freopen("landlords.out","w",stdout);scanf("%d%d%d",&n,&q,&op);if(op==1) a=b=1,c=0; // a_i=a+b*(i-1)+c*(i-1)*(i-2)else a=1,b=3,c=1;fac[0]=inv_fac[0]=inv[1]=fac[1]=inv_fac[1]=1;for(i=2;i<=n;i++){fac[i]=fac[i-1]*i%kcz;inv[i]=-(kcz/i)*inv[kcz%i]%kcz;inv_fac[i]=inv_fac[i-1]*inv[i]%kcz;}while(q--){scanf("%d",&A);a_=(a+b*A+c*A%kcz*(A-1ll))%kcz; // 平移x->x+Ab_=(b+c*2*A)%kcz;c_=c;t=invC(n,A);a=(a*C(n-1,A-1)+a_*C(n-1,n-A-1))%kcz*t%kcz; // 更新系数b=(b*C(n-2,A-2)+b_*C(n-2,n-A-2))%kcz*t%kcz;c=(c*C(n-3,A-3)+c_*C(n-3,n-A-3))%kcz*t%kcz;}scanf("%d",&q);while(q--)scanf("%d",&i),printf("%lld\n",(f(i)+kcz)%kcz);fclose(stdin),fclose(stdout);return 0;
}
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=500000+10;
const int maxm=10000000+10;
const int mod=998244353;
const int inv2=(mod+1)>>1;
int n,m,q,type;ll A,B,C,f[10][10],g[10],h[10],w[10],inv[maxm];inline ll F(int x) {return (A*x%mod*x+B*x+C)%mod;}int main()
{scanf("%d%d%d",&n,&m,&type);inv[0]=inv[1]=1;for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;if(type==1) A=0,B=1,C=0;else A=1,B=0,C=0;int tmp;ll X,Y,Z;for(int i=1;i<=m;i++){scanf("%d",&tmp);for(int j=1;j<=3;j++) g[j]=F(j),h[j]=F(j+tmp),w[j]=0;for(int j=0;j<3;j++)for(int k=0;k<3;k++) f[j][k]=0;f[0][0]=1;for(int j=0;j<3;j++)for(int k=0;k<3;k++){if(j+k>=3) break;if(j<tmp){ll val=f[j][k]*(tmp-j)%mod*inv[n-j-k]%mod;(f[j+1][k]+=val)%=mod;(w[j+k+1]+=val*g[j+1])%=mod;}if(k<n-tmp){ll val=f[j][k]*(n-tmp-k)%mod*inv[n-j-k]%mod;(f[j][k+1]+=val)%=mod;(w[j+k+1]+=val*h[k+1])%=mod;}}X=w[1];Y=w[2];Z=w[3];A=((Z-2*Y+X)*inv2%mod+mod)%mod;B=((8*Y-5*X-3*Z)*inv2%mod+mod)%mod;C=((3*X-3*Y+Z)%mod+mod)%mod;}scanf("%d",&q);while(q--){scanf("%d",&tmp);printf("%lld\n",F(tmp));}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Shopee平台上进行选品 :充分利用渠道获取灵感和数据支持

在Shopee平台上进行选品是一个关键的决策过程&#xff0c;它直接影响到卖家的销售业绩和店铺的发展。为了帮助卖家更好地进行选品&#xff0c;Shopee提供了多种渠道来获取灵感和数据支持。下面将介绍一些主要的选品渠道以及如何利用它们来进行选品。 先给大家推荐一款shopee知…

如何快速解决局域网IP冲突问题?连接IP地址冲突如何用代理IP搞定?

随着互联网的普及&#xff0c;局域网已经成为了许多家庭和企业中不可或缺的一部分。然而&#xff0c;局域网中的IP地址冲突问题却时常困扰着用户。一旦出现IP地址冲突&#xff0c;网络连接就会变得不稳定&#xff0c;甚至无法正常上网。那么&#xff0c;如何快速解决局域网IP冲…

[极客大挑战 2019]Upload1

直接上传php一句话木马&#xff0c;提示要上传image 把文件名改成gif并加上gif文件头后&#xff0c;绕过了对image类型的检测&#xff0c;但是提示文件内含有<?&#xff0c;且bp抓包后改回php也会被检测 那我们考虑使用js执行php代码 <script languagephp>eval($_PO…

算力、应用、方案,联想布局全栈AI,以自身制造与供应链范本助力千行百业智能化转型升级

1月23日-24日&#xff0c;联想集团举办主题为“算领AI时代 筑基智能变革”的擎智媒体沙龙和新IT思享会“走进联想”活动。在活动中&#xff0c;联想集团副总裁、中国区首席市场官王传东表示&#xff0c;今年是联想成立40周年&#xff0c;联想已构建了全栈智能布局&#xff0c;将…

WMS仓储管理系统可视化数据看板解决方案

在快节奏的现代商业环境中&#xff0c;有效的仓储管理对于确保供应链的顺畅运作至关重要。随着科技的飞速发展&#xff0c;传统的仓储管理方式已逐渐被数字化、自动化的管理方式所取代。其中&#xff0c;WMS仓储管理系统可视化数据看板作为新兴的仓储管理工具&#xff0c;为仓库…

TCP的连接和关闭的那些事

一、基础概念 1、啥是TCP&#xff1f; 它是面向连接的一种协议&#xff0c;任何数据发送之前都需要建立连接。 2、TCP/IP协议的四层中那一层&#xff1f; TCP位于运输层&#xff0c;详见下图 3、TCP协议的状态机有哪些? 在链接建立和断开不同阶段都有不同的状态&#xf…

Linux 驱动开发基础知识——编写LED驱动程序(三)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

边裁边招,2024大厂往哪“卷”?

裁员只是大厂踌躇、转型的缩影&#xff0c;无论是林平还是背后的公司、行业&#xff0c;都亟需给未来一个确定的答案。 从2021年冬天开始&#xff0c;大厂裁员的消息有如“击鼓传花”般&#xff0c;不断冲击着圈内外网友们的神经&#xff0c;那可能是“裁员”这个话题自互联网…

css中>>>、/deep/、::v-deep的作用和区别,element-ui自定义样式

文章目录 一、前言1.1、/deep/1.2、::v-deep1.3、>>> 二、区别三、总结四、最后 一、前言 1.1、/deep/ 在style经常用scoped属性实现组件的私有化时&#xff0c;要改变element-ui某个深层元素&#xff08;例如.el-input__inner&#xff09;或其他深层样式时&#xf…

JOSEF约瑟 大容量中间继电器 RXMH2 RK223 067 DC220V 带底座

系列型号 RXMH2 RK 223 067大容量中间继电器&#xff1b; RXMH2 RK 223 068大容量中间继电器&#xff1b; RXMH2 RK 223 069大容量中间继电器&#xff1b; RXMH2 RK 223 070大容量中间继电器&#xff1b; 一、用途 RXMH2系列大容量中间继电器用于工业自动化控制及电力系统二次…

app重新签名之后,teamID会改变吗?

哈喽大家好&#xff0c;我是咕噜美乐蒂&#xff0c;很高兴又见面啦&#xff01; 在iOS和macOS开发中&#xff0c;我们经常需要对应用进行重新签名&#xff0c;以便在发布或测试时更改应用的证书或代理。在重新签名应用程序时&#xff0c;可能会出现teamID变化的情况。本文将探…

冷知识:COS上传文件时可以同步获取文件信息

背景介绍 本文将介绍如何在上传文件到 COS 时同步获取文件信息&#xff0c;如图片的宽高、格式等。 目前&#xff0c;可以通过 COS 上传接口&#xff0c;如 PUT Object、CompleteMultipartUploads 等将文件存储至 COS 存储桶中&#xff0c;我们针对以下三种场景提供上传时同步…

Windows主机Navicat远程连接到Ubuntu18.04虚拟机MySQL

1. 在虚拟机上安装MySQL sudo apt-get install mysql-server sudo apt-get install libmysqlclient-dev 2. 检查安装 sudo netstat -tap | grep mysql 3. 查看默认密码 sudo cat /etc/mysql/debian.cnf 4. 用查看到的密码登录MySQL server&#xff0c;修改root用户的密码 …

javaWebssh宠物基地管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh宠物基地管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

JS进阶-内置构造函数(二)

小提示&#xff1a;这些内置函数在开发使用的频率非常的频繁&#xff0c;建议认真看一下&#xff0c;并背一下 目录 知识回顾&#xff1a; • Object 三个常用静态方法&#xff08;静态方法就是只有构造函数Object可以调用的&#xff09; Object.keys Object.values Obj…

梯度的计算

文章目录 import torch as tc# 以函数f(x) x^2 为例子&#xff0c;求梯度 x1 tc.tensor(1,dtypetc.float64,requires_gradTrue) g1 tc.autograd.grad(x1**2,x1)[0] print(f"The grad of x**2 at {x1} is {g1}")(x1 ** 2).backward() print(f"The grad of x*…

浅谈WPF之UI布局

一个成功的软件&#xff0c;离不开人性化的UI设计&#xff0c;如何抓住用户第一视觉&#xff0c;让用户产生依赖感&#xff0c;合适优雅的布局必不可少。本文以一些简单的小例子&#xff0c;简述WPF中布局 面板 控件的使用&#xff0c;仅供学习分享使用&#xff0c;如有不足之处…

AWS 云监控工具

Amazon Web Services&#xff08;AWS&#xff09;是 Amazon 提供的云计算平台&#xff0c;为企业提供技术服务&#xff0c;包括计算能力、存储和数据库。借助 AWS&#xff0c;企业无需购买、拥有或维护物理数据中心和服务器&#xff0c;而 AWS 的即用即付方法使企业能够避免与 …

vcruntime140.dll找不到的多种解决方法分享,修复vcruntime140.dll文件

当操作电脑软件的过程中弹出一个错误提示“vcruntime140.dll已加载,但找不到入口点”&#xff0c;这通常意味着程序所依赖的vcruntime140.dll文件可能已经丢失、遭到破坏&#xff0c;或者该文件的路径及位置在软件开发时未被正确配置。此外&#xff0c;这种情况还有可能是因为电…

Windows11 Copilot助手开启教程(免费GPT-4)

Windows11上开启Copilot助手教程踩坑指南 Copilot介绍Copilot开启步骤1、更新系统2、更改语言和区域3、下载 ViVeTool 工具4、开启Copilot 使用 Copilot介绍 Windows Copilot 是 Windows 11 中的一个新功能&#xff0c;它可以让你与一个智能助理进行对话&#xff0c;获取信息&…