当前位置: 首页 > news >正文

【题解】CF1983E

翻译

原题链接
在这里插入图片描述

分析

  显然,两人得分总和等于所有球的分数之和,所以我们只需要研究一个人即可,这里我们考虑Alice。

  分析哪些球会被Alice拿走。我们称前 k k k个球为 1 1 1,其他球为 0 0 0。然后把一个 0 0 0和与前一个 0 0 0之间的所有 1 1 1记为一个组:

01101110011 分为 0 110 1110 0 11

  于是第奇数个组的球归Alice所有,考虑上末端(空无所谓),共 n − k + 1 n-k+1 nk+1个组。

  接下来求期望。先考虑 0 0 0。第 i ( i > k ) i(i>k) i(i>k)个球被Alice拿到当且仅当它为第奇数个白球,所以它的贡献为:

⌈ n − k 2 ⌉ n − k ∗ v i \frac{\left \lceil \frac{n-k}{2} \right \rceil }{n-k} * v_{i} nk2nkvi

   0 0 0的总贡献为:

⌈ n − k 2 ⌉ n − k ∑ i = k + 1 n v i \frac{\left \lceil \frac{n-k}{2} \right \rceil }{n-k} \sum_{i=k+1}^{n}v_{i} nk2nki=k+1nvi

  再考虑 1 1 1的贡献,第 i ( i ≤ k i(i \le k i(ik)个球被Alice拿到,当且仅当它属于第奇数个组,每个球放哪个组互相独立,不干扰,同组之间的顺序也不影响贡献。所以 v i v_{i} vi的贡献为:

⌈ n − k + 1 2 ⌉ n − k + 1 ∗ v i \frac{\left \lceil \frac{n-k+1}{2} \right \rceil }{n-k+1} * v_{i} nk+12nk+1vi

   1 1 1的总贡献为:

⌈ n − k + 1 2 ⌉ n − k + 1 ∑ i = 1 k v i \frac{\left \lceil \frac{n-k+1}{2} \right \rceil }{n-k+1} \sum_{i=1}^{k}v_{i} nk+12nk+1i=1kvi

  综上,总期望为:

E ( A l i c e ) = ⌈ n − k + 1 2 ⌉ n − k + 1 ∑ i = 1 k v i + ⌈ n − k 2 ⌉ n − k ∑ i = k + 1 n v i E(Alice) = \frac{\left \lceil \frac{n-k+1}{2} \right \rceil }{n-k+1} \sum_{i=1}^{k}v_{i} + \frac{\left \lceil \frac{n-k}{2} \right \rceil }{n-k} \sum_{i=k+1}^{n}v_{i} E(Alice)=nk+12nk+1i=1kvi+nk2nki=k+1nvi

E ( B o b ) = ∑ i = 1 n − E ( A l i c e ) E(Bob) = \sum_{i=1}^{n} - E(Alice) E(Bob)=i=1nE(Alice)

代码

  除法逆元的计算使用 1 x ≡ x ( p − 2 ) ( m o d p ) \frac{1}{x} \equiv x^{(p-2)} \ (mod\ \ p) x1x(p2) (mod  p),其中 p p p为质数,证明在此略。

#include<bits/stdc++.h>
using namespace std;
#define N 500005
#define int long long
const int mod = 1e9+7;
int t, n, k, a[N];
int quick(int x, int t) {int now = 1;while(t) {if(t & 1) now = now * x % mod;x = x * x % mod;t >>= 1;}return now;
}
signed main() {cin>>t;while(t--) {cin>>n>>k;for(int i=1;i<=n;i++) scanf("%lld", a+i);int sum1 = 0, sum2 = 0;for(int i=1;i<=k;i++) sum1 += a[i]; sum1 %= mod;for(int i=k+1;i<=n;i++) sum2 += a[i]; sum2 %= mod;int ans1 = (n-k+1) / 2 * quick(n-k, mod-2) % mod * sum2 % mod;int ans2 = (n-k+2) / 2 * quick(n-k+1, mod-2) % mod * sum1 % mod;int ans = (ans1 + ans2) % mod;printf("%lld %lld\n", ans, ((sum1 + sum2 - ans) % mod + mod) % mod);}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python redis 安装和使用介绍
  • 计算机考研408-计算机网络
  • 【Java】并发集合
  • 【小波去噪】【matlab】基于小波分析的一维信号滤波(对照组:中值滤波、均值滤波、高斯滤波)
  • Linux 信号的产生
  • 同为TVT设备主动注册协议接入SVMSPro平台
  • 电子看板实时监控数据可视化助力工厂精细化管理
  • 【CTF Reverse】XCTF GFSJ1101 Mine- Writeup(反编译+动态调试+Base58编码)
  • go多线程
  • SysML图例-制药
  • 算法.图论-并查集上
  • 一款全看个人造化的Windows命令行软件下载安装管理器:Scoop
  • Revit学习记录-版本2018【持续补充】
  • python SQLAlchemy 数据库连接池
  • Robot Operating System——32 位浮点数表示的三维空间中一个点
  • SegmentFault for Android 3.0 发布
  • 时间复杂度分析经典问题——最大子序列和
  • @angular/forms 源码解析之双向绑定
  • [NodeJS] 关于Buffer
  • JavaScript 基础知识 - 入门篇(一)
  • Java反射-动态类加载和重新加载
  • PHP的类修饰符与访问修饰符
  • python 学习笔记 - Queue Pipes,进程间通讯
  • yii2权限控制rbac之rule详细讲解
  • 大快搜索数据爬虫技术实例安装教学篇
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 将 Measurements 和 Units 应用到物理学
  • 目录与文件属性:编写ls
  • ​【已解决】npm install​卡主不动的情况
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #《AI中文版》V3 第 1 章 概述
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二开)Flink 修改源码拓展 SQL 语法
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .net core Redis 使用有序集合实现延迟队列
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .net中的Queue和Stack
  • :class的用法及应用
  • @font-face 用字体画图标
  • @vueup/vue-quill使用quill-better-table报moduleClass is not a constructor
  • @在php中起什么作用?
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [BT]BUUCTF刷题第9天(3.27)
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [C# 开发技巧]实现属于自己的截图工具
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C]整形提升(转载)
  • [C++][数据结构][跳表]详细讲解