首页 > 其他分享 >[ARC111F] Do you like query problems?

[ARC111F] Do you like query problems?

时间:2023-12-17 17:35:43浏览次数:31  
标签:Do ch frac int sum problems times ARC111F aligned

题意:

给出三个数 \(n,m,q\)。

你有一个长度为 \(n\) 的序列 \(a\),初始全为为 \(0\),你有三种操作:
操作 \(1\):给出 \(l,r,v\),让区间 \([l,r]\) 对 \(v\) 取 \(\min\)。
操作 \(2\):给出 \(l,r,v\),让区间 \([l,r]\) 对 \(v\) 取 \(\max\)。
操作 \(3\),给出 \(l,r\),求区间和,将其累加进一个叫 \(sum\) 的变量里。

你并不需要维护这个数据结构,而是统计一共有 \(q\) 个操作的情况下,所有不同的操作序列中 \(3\) 操作得到的 \(sum\) 的总和,对 \(998244353\) 取模。你需要保证 \(v\in[0,m-1]\)。

分析:

img

显然的,输入的数据最多只可能有 \(((2m+1) \times \frac{n \times (n+1)}{2})^q\) 种。

对于这种问题,可以通过计算期望使得计算更简便。

不妨考虑计算每个位置对答案的贡献。

记一个 \(P(t,i)\) 表示经过 \(t\) 次修改操作最后变成 \(i\) 的概率。

考虑 dp 计算,如果要修改 \(i\),能改变 \(i\) 的只会是 \(\min(i,x)(x<i)\) 以及 \(\max(i,x)(x>i)\)。

易得:

\[\begin{aligned} P(t,i) &=\frac{P(t-1,i) \times (n+1)+\sum_{j=0(j \ne i)}^{m} P(t-1,j)}{2 \times m} \\&=\frac{1}{2m}+\frac{P(t-1,i)}{2} \\&=\frac{1}{m}-\frac{1}{m \times 2^t}(i \ne 0) \end{aligned} \]

然后再记一个 \(E(t)\) 表示一个数经过 \(t\) 次修改得期望值。

\[\begin{aligned} E(t) &=\sum_{i=1}^{m-1}i \times P(t,i) \\&=(\frac{1}{m}-\frac{1}{m \times 2^t}) \times \frac{m \times (m-1)}{2} \\&=(1-\frac{1}{2^t})\frac{m-1}{2} \end{aligned} \]

但不可能每次操作 \([l,r]\) 都包含这个数吧(滑稽

因此需要记一个 \(z_i\) 表示 \(i\) 被包含得概率。显然 \(z(i)=\frac{i \times (n-i+1)}{\frac{n \times (n+1)}{2}}\)。

于是我们就把 \(P(t,i)\) 升级到 \(w(t,i)\) 表示 \(i\) 经过 \(t\) 次全局操作得期望值:

\[\begin{aligned} w(t,i) &= \sum_{j=0}^{t}C_{t}^{j} \times z_{i}^{j} \times (1-z_{i}^{t-j})E(t) \\&=\frac{m-1}{2}(1-(1-\frac{z_i}{2})^t) \end{aligned} \]

令 \(T_i=1-\frac{w_i}{2}\)。

\(j\) 表示操作到 \(i\) 头上得次数,最后一步用了二项式定理推导。

再加入一波修改操作 \(g(t,i)\) 表示 \(i\) 经过 \(t\) 次操作(包含查询)的期望值:

\[g(t,i)=\frac{m-1}{2}(1-(\frac{2mT_i+1}{2m+1})^t) \]

那么最后 \(x\) 的期望值为

\[\begin{aligned} E(x) &= \sum_{i=1}^{n} \frac{z_i}{2m+1}\sum_{j=1}^{q}g(j-1,i) \\&= \frac{z_i}{2m+1}\frac{m-1}{2}\sum_{j=1}^{q}(1-(\frac{2mT_i+1}{2m+1})^{j-1}) \end{aligned} \]

显然可以用等比数列求和快速计算。

最后答案就是

\[E(x) \times ((2m+1) \times \frac{n \times (n+1)}{2})^q \]

完结撒花!

img

代码:

#include<bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
int Pow(int a, int n) {
	if(n == 0) return 1;
	if(n == 1) return a % mod;
	int x = Pow(a, n / 2);
	if(n % 2 == 0) return x * x % mod;
	else return x * x % mod * a % mod;
}
int read() {
	char ch = getchar(); int x = 0, f = 1;
	while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); }
	while(ch >= '0' && ch <= '9') {
		x = x * 10 + ch - '0';
		ch = getchar();
	}
	return x * f;
}
void write(int x) {
	if(x < 0) putchar('-'), x = -x;
	if(x > 9) write(x / 10);
	putchar('0' + x % 10);
}
int inv(int x) {
	return Pow(x, mod - 2);
}
int n, m, q, ans;
signed main() {
	cin >> n >> m >> q;
	for(int i = 1; i <= n; i++) {
		int p = i * (n - i + 1) % mod * inv((n + 1) * n / 2 % mod) % mod;
		int P = (1 - p * inv(2) % mod + mod) % mod;
		int z = (2 * m % mod * P % mod + 1) % mod * inv(2 * m + 1) % mod;
		int S = (Pow(z, q) - 1 + mod) % mod * inv(z - 1) % mod;	
		ans = (ans + p * inv(2 * m + 1) % mod * (m - 1) % mod * inv(2) % mod * ((q - S + mod) % mod) % mod) % mod;
	}
	cout << ans * Pow((2 * m + 1) % mod * n % mod * (n + 1) % mod * inv(2) % mod, q) % mod;
	return 0;
}

标签:Do,ch,frac,int,sum,problems,times,ARC111F,aligned
From: https://www.cnblogs.com/xcs123/p/17909408.html

相关文章

  • docker从0安装Jenkins
    docker从0安装JenkinsUbuntu初始化sudoapt-getinstallopenssh-serversudovim/etc/ssh/sshd_config设置静态IPcd/etc/netplan···network:version:2renderer:NetworkManagerethernets:ens33:#网卡名称dhcp4:no#关闭dhcp......
  • Swin Transformer: Hierarchical Vision Transformer using Shifted Windows详解
    初读印象comment::(Swin-transformer)代码:https://github.com/microsoft/Swin-Transformer动机将在nlp上主流的Transformer转换到cv上。存在以下困难:nlp中单词标记是一个基本单元,但是视觉元素在尺度上有很大的变化。图像分辨率高,自注意力操作计算复杂度是图像大小的二次方......
  • Windows利用nvm进行node版本控制(node 版本管理工具nvm的安装与使用)
    为什么需要对node进行版本管理?不同项目的node的版本并不相同,不同版本之间的兼容性并不好,所以需要工具(node版本管理工具)进行快速切换node版本。下载与安装(Windows)1.卸载电脑原有node直接去控制面板/win11设置卸载就行2.安装nvmGithub下载地址下载地址里面有两类nv......
  • 前端docx-templates生成word文档
    说明docx-templates项目地址:https://github.com/guigrpa/docx-templates原文:https://juejin.cn/post/7170695319004315679?searchId=202312171247306E0B93A485DAE6B4E304这个库能干啥?这个库能做的:替换Word模板中的文字实现FOR和IF操作在文档指定位置插入图片在模板里写......
  • Windows 12将为个人电脑将带来颠覆性改变!PC史无前例的五大变化
    多方迹象显示,2024年将正式开启AIPC元年,2027年AIPC将成为市场主流。而Windows12的到来,将为个人电脑将带来颠覆性改变。近日举办的英特尔人工智能创新应用大赛上。联想集团副总裁、中国区首席市场官王传东发言表示,一台真正意义上的AIPC产品,应具备五大特征:首先是内嵌个人智能体......
  • 多开软件对Windows电脑内存的占用情况
    当今,许多人在日常使用电脑时可能会遇到需要同时打开多个应用程序或者多个账户的情况。为了应对这种需求,一些用户选择使用多开软件来实现在同一台电脑上同时打开多个应用程序或账户的功能。然而,使用多开软件可能会对Windows电脑的内存占用产生一定的影响。首先,让我们来了解一下多......
  • Hadoop YARN生产环境核心配置参数
    1.ResourceManager相关配置参数说明默认值备注yarn.resourcemanager.scheduler.class配置调度器,默认为容量调度器(Apache)org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler对并发度要求高,首选公平调度器,对并发度要求不高,则......
  • Wordpress modown8.8.1主题学习版开心版
    Modown是模板兔基于Erphpdownwordpress下载插件开发的付费下载资源、付费下载源码、收费附件下载、付费阅读查看隐藏内容、团购下载的WordPress主题,本站提供Modown主题开心版,免授权使用,仅用于个人学习,禁止用于商业用途!!!下载地址:https://www.itwk.cc/circle/921.html......
  • DOCKER20231217: 容器引擎Docker
       1.1Docker简介 1.1.1什么是Docker?一种轻量级的操作系统虚拟化技术,基于Go语言实现的开源容器项目,诞生于2013年,最初发起者是dotCloud公司(现DockerInc)Docker容器化虚拟技术vs传统虚拟机技术特性容器虚拟机启动秒级分钟级硬盘使用一般为MB一般为G......
  • 使用Docker自定义配置部署RustDesk Server
    “RustDesk是一款可以平替TeamViewer的开源软件,旨在提供安全便捷的自建方案。”这是RustDesk官网对自己的描述。作为一款使用Rust语言开发的开源软件,在为数不多的Rust开发者和数量庞大的Rust学习者中还是有相当的知名度的,并且商业化的RustDeskPro也是如火如荼。开始docker......