23.7.20 杭电暑期多校2部分题解

news2024/12/24 22:11:04

1001 - Alice Game

题目大意

有一个长度为 n n n 的怪物序列( n n n 可能为 0 0 0),给定一个 k k k,轮到某人回合时会有两种操作:

  1. 选择一个连续的序列,它的长度小于等于 k k k,将其全部删除

  2. 选择一个连续的序列,将其中连续的 k k k 个数删除,使删除后原序列恰好变成两个非空序列

Alice和Bob轮流操作,问谁会赢

解题思路

先进行小数据推导:

  1. 1 ≤ n ≤ k 1\le n\le k 1nk 时,一次操作直接搞定,Alice赢

  2. n = 0 n=0 n=0 或者 n = k + 1 n=k+1 n=k+1 时,先手无法操作,Bob赢

  3. 2 k + 2 ≤ n ≤ 3 k + 1 2k+2\le n\le 3k+1 2k+2n3k+1 时,先手可以自己决定是否在此区间内获胜

若剩下的区间存在先手必败状态便会改变总游戏的先手胜负状态

因此Alice为了赢会尽量不把2和3的情况留给Bob

n = 5 k + 3 n=5k+3 n=5k+3 时,Alice无论如何操作总会留下让Bob可以改变总游戏先手胜负状态的区间,因此必败

以此类推,可以发现当 n % ( 4 k + 2 ) = k + 1 n\%(4k+2)=k+1 n%(4k+2)=k+1 时Bob获

其余状态就是Alice获胜

code

#include <bits/stdc++.h>
using namespace std;
int t, k, n;
int main() {
    scanf("%d", &t);
    while (t --) {
        scanf("%d%d", &k, &n);
        if (n % (4 * k + 2) == k + 1 || n == 0) printf("Bob\n");
        else printf("Alice\n");
    }
    return 0;
}

1011 - SPY finding NPY

题目大意

1 1 1 n n n 随机排序,你需要确定一个下标 k k k 进行以下操作( 0 ≤ k < n 0\le k<n 0k<n):

  1. 取前 k k k 个数中的最大数记为 x x x,如果 k = 0 k=0 k=0,那么 x = − 1 x=-1 x=1

  2. k + 1 k+1 k+1 n − 1 n-1 n1 中去枚举,找到第一个大于 x x x 的数

  3. 如果第二步没有找到这个数,取第 n n n 个数

问你如何取 k k k 才能使最后取的数为 n n n 的概率最大

解题思路

拿到这道题第一感觉是道数学题,所以先推公式

所求概率等于合法方案数除以总方案数,所以我们只要推合法方案数即可

n n n 一定的情况下对于每个 k k k k = 0 k=0 k=0 时方案数为 ( n − 1 ) ! (n-1)! (n1)!

k ≠ 0 k\ne0 k=0 时,假设 i i i n n n 这个数的位置, j j j 是前 k k k 个数中最大的数

如果暴力求解,可以计算出合法方案数为 k ∑ i = k + 1 n ∑ j = i − 1 n − 1 A j − 1 i − 2 A n − i n − i k\sum_{i=k+1}^n\sum_{j=i-1}^{n-1}A_{j-1}^{i-2}A_{n-i}^{n-i} ki=k+1nj=i1n1Aj1i2Anini

解释: j j j 可以放在 k k k 个位置,因此有 k k k 个方案

再用 1 1 1 j − 1 j-1 j1 去填补前 i i i 位,空位有 i − 2 i-2 i2 个,因此有 A j − 1 i − 2 A_{j-1}^{i-2} Aj1i2 个方案

最后还剩下 n − i n-i ni 个位置要用剩下 n − i n-i ni 个数去填,因此有 A n − i n − i A_{n-i}^{n-i} Anini 个方案

然后我就卡住了,因为我不会化简,所以就去打一下 n = 4 n=4 n=4 的情况

打表结果如下:
在这里插入图片描述
用自己的式子计算如下:
在这里插入图片描述
然后发现好像和自然对数有关系,找下规律,猜想 k ∑ i = k + 1 n ∑ j = i − 1 n − 1 A j − 1 i − 2 A n − i n − i = k ∑ i = k n − 1 ( n − 1 ) ! i k\sum_{i=k+1}^n\sum_{j=i-1}^{n-1}A_{j-1}^{i-2}A_{n-i}^{n-i}=k\sum_{i=k}^{n-1}\frac{(n-1)!}{i} ki=k+1nj=i1n1Aj1i2Anini=ki=kn1i(n1)!

在考场上直接跳过验证进入了下一步,赛后尝试推了一下还是推不出来,然后尝试换了个思路

在确定了 n n n 所在的位置在 i i i 之后,其实只需要保证前 i − 1 i-1 i1 个数中的最大值在 1 1 1 k k k 就可以了

而这种情况在全部的排列中出现的概率为 k i − 1 \frac{k}{i-1} i1k

那么合法方案数就是 ∑ i = k + 1 n A n − 1 n − 1 ∗ k i − 1 = k ∑ i = k n − 1 ( n − 1 ) ! i \sum_{i=k+1}^{n}A_{n-1}^{n-1}*\frac{k}{i-1}=k\sum_{i=k}^{n-1}\frac{(n-1)!}{i} i=k+1nAn1n1i1k=ki=kn1i(n1)!

不难靠直觉发现这是个关于 k k k 先増后减的函数

可以三分,可以靠样例和公式判断答案在 n e \frac{n}{e} en 左右去找,甚至可以暴力

因为暴力不会超时且更简单,所以我选择了暴力

比较的时候可以把 ( n − 1 ) ! (n-1)! (n1)! 约掉,只要比较 k ∑ i = k n − 1 1 i k\sum_{i=k}^{n-1}\frac{1}{i} ki=kn1i1 就可以了

code

#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 9;
const double EPS = 1e-12;
int t, n, ans;
double f[N], num;
int main() {
    for (int i = 1; i < N; ++ i) f[i] = f[i - 1] + (1.0 / i);
    //预处理,f[i]为数列{1/n}的前i项和,要得到表达式只需要差分一下就可以了
    scanf("%d", &t);
    while (t --) {
        scanf("%d", &n);
        ans = 0, num = 1.0;//num初始值为k=0时的方案数除以(n-1)!
        for (int i = 1; i < n; ++ i)
            if ((f[n - 1] - f[i - 1]) * i - num <= EPS) {ans = i - 1; break;}
            //找到第一个下降的位置并记录前一位即是所求最大值的位置,浅浅注意一下double比大小的精度
            else num = (f[n - 1] - f[i - 1]) * i;
        printf("%d\n", ans);
    }
    return 0;
}

1010 - Klee likes making friends

题意、思路待补

code

#include <bits/stdc++.h>
using namespace std;
const int N = 2e4 + 9;
const int M = 2009;
int t, n, m, a[N], f[M][M], b[M][M], c[M], g[M] = {0x3f3f3f3f}, sum;
int main() {
	scanf("%d", &t);
	while (t --) {
		scanf("%d%d", &n, &m);
		for (int i = 0; i < n; ++ i) scanf("%d", &a[i]);
		sum = 0x3f3f3f3f;
		for (int i = 0; i < m; ++ i) {
			f[i][0] = 0x3f3f3f3f;
			for (int j = 1; j <= m; ++ j) {
				if (i - j < 0) b[i][j] = 0x3f3f3f3f;
				else b[i][j] = a[i] + a[i - j];
				f[i][j] = min (f[i][j - 1], b[i][j]);
			}
		}
		for (int i = m ; i < n; ++ i) {
			for (int j = 1; j <= m; ++ j)
				c[j] = a[i] + f[(i - j) % m][m - j],
				g[j] = min(g[j - 1], c[j]);
			for (int j = 1; j <= m; ++ j)
				b[i % m][j] = c[j], f[i % m][j] = g[j];
		}
		for (int i = 1; i <= m; ++ i)
			sum = min(sum, f[(n - i) % m][m - i]);
		printf("%d\n", sum);
	}
	return 0;
}

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

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

相关文章

【转载】elasticsearch 倒排索引原理

由于整型数字 integer 可以被高效压缩的特质&#xff0c;integer 是最适合放在 postings list 作为文档的唯一标识的&#xff0c;ES 会对这些存入的文档进行处理&#xff0c;转化成一个唯一的整型 id&#xff08;这个id是document的id&#xff09;。 再说下这个 id 的范围&…

VS Code 使用 autoDocstring 插件快速生成 python 函数的文档字符串

VS Code 使用 autoDocstring 插件快速生成 python 函数的文档字符串 支持的文档类型用法扩展设置此扩展提供以下设置&#xff1a;设置方式自定义文档字符串模板附加部分 支持的文档类型 googlesphinxnumpydocBlockrone-line-sphinxpep257 用法 光标必须位于定义正下方的行上…

【strapi系列】strapi在postman中如何调试public和认证用户Authorization的接口

文章目录 一、public用户的调试二、认证用户的调试1、新建一个用户&#xff0c;用于获得token2、调用获取token的接口来获得token3、请求时携带token调用权限接口 三、参考链接 一、public用户的调试 对于public用户&#xff0c;如果是get请求&#xff0c;即使不在postman&…

【git学习】

版本控制 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发追踪和记载一个或者多个文件…

wordpress如何实现显示文章和分类ID?

可以直接将下面的代码添加到当前主题的 functions.php 文件即可 <?php /*** WordPress后台的文章、分类&#xff0c;媒体&#xff0c;页面&#xff0c;评论,链接等所有信息中显示ID并将ID设置为第一列*/ // 添加一个新的列 ID function ssid_column($columns) {//将ID设置…

一个企业级的文件上传组件应该是什么样的

目录 1.最简单的文件上传 2.拖拽粘贴样式优化 3.断点续传秒传进度条 文件切片 计算hash 断点续传秒传(前端) 断点续传秒传(后端) 进度条 4.抽样hash和webWorker 抽样hash(md5) webWorker 时间切片 5.文件类型判断 通过文件头判断文件类型 6.异步并发数控制(重要…

Linux部署程序之glibc兼容性问题

Linux部署程序之glibc兼容性问题 在部署程序的时候&#xff0c;一般会遇到glibc不兼容的问题&#xff0c;现象如下&#xff1a; /lib64/libstdc.so.6: version GLIBCXX_3.4.21’ not found在此之前先要了解一下 gcc/glibc/libc/libstdc 是什么东东。 gcc/glibc/libc/libstdc…

PHP变量和常量(基础语法)

文章目录 PHP变量和常量&#xff08;基础语法&#xff09;简介变量常量 PHP中的变量变量基础全局变量超全局变量静态变量 PHP常量基础总结 PHP变量和常量&#xff08;基础语法&#xff09; 简介 变量和常量是编程语言中不可或缺的元素&#xff0c;它们类似于盒子&#xff0c;…

06 QT自定义信号和槽

案例&#xff1a;创建教师类和学生类&#xff0c;教师发出自定义hungry信号&#xff0c;学生响应信号&#xff0c;执行treat函数。 创建老师和学生类&#xff08;由于老师和学生不是控件&#xff0c;所以选择QObject作为基类&#xff09; 1&#xff1a;老师发送自定义信号&…

「深度学习之优化算法」(十七)灰狼算法

1. 灰狼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余…

Qgis二次开发-实现缩略图、标注

1.效果图 2.简介 因为上述动作是和画布进行交互&#xff0c;所以首先需要自定义一个地图交互工具类&#xff0c;由于做的比较简单&#xff0c;只需要重写实现鼠标点击事件。 void canvasPressEvent(QgsMapMouseEvent *e) override; 其次就是在地图画布上画标注图片(svg格式)…

Docker中的网络

文章目录 一、Docker 网络1.1 Docker 网络实现原理1.2 查看容器的输出和日志信息Docker 的网络模式 二、资源控制2.1 CPU 资源控制2.2 对内存使用的限制 一、Docker 网络 1.1 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&a…

CentOS7安装并远程连接MySQL8.0.33

一、前言 学习MySQL进阶篇时需要在CentOS上安装MySQL&#xff0c;然后远程连接使用&#xff0c;于是就抽了两天时间把瑞吉外卖的Linux篇给看了95% 本篇是摘选了学习笔记中关于安装MySQL的部分&#xff0c;作为参考也作为分享 二、安装MySQL 先检测当前系统中是否已安装MySQL…

平头哥 TH1520 RISC-V BeagleV-Ahead使用Thead-Yocto自定义构建系统 最详细版本

使用Thead-Yocto自定义BeagleV-Ahead系统 Thead-Yocto简述 官网&#xff1a;https://www.yoctoproject.org/ THE YOCTO PROJECT. IT’S NOT AN EMBEDDED LINUX DISTRIBUTION,IT CREATES A CUSTOM ONE FOR YOU. YOCTO项目&#xff1a;他不是一个嵌入式Linux发行版&#xff0c…

SQL SERVER安装

其中服务器名称输入./自己本机电脑名称. nchar类型一个单位可以放一个汉字-------长度短的补空格一个字节8位一个汉字两个字节 char类型两个单位可以放一个汉字 nvarchar类型是可变长度-----------长度短不会补空格 varchar类型是可变长度两个单位可以放一个汉字---------…

电脑显示连接上WiFi,但没办法上网

问题: 电脑显示已经连接上WiFi。但是百度不出来东西&#xff0c;也没办法打开任何网页。 解决方法&#xff1a; win10系统 在左下角搜索栏&#xff0c;搜索“代理服务器设置”。 找到手动设置代理 —》关闭“使用代理服务” 【默认是打开的】 关闭之后即可上网~~

Python(三十四)条件表达式

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

数据结构--线性表两种存储方式的总结以及应用

这里写目录标题 顺序表和链表的比较存储密度链表的优缺点二者特点的比较以及使用场景 应用线性表的合并有序表的合并用顺序表实现用链表实现 案例实现多项式运算稀疏多项式的运算链表的创建多项式相加图书管理系统 顺序表和链表的比较 存储密度 链表的优缺点 二者特点的比较以…

mybatis学习笔记之在WEB中应用MyBatis

文章目录 数据库表的设计和准备数据环境搭建前端页面编写后端代码实现后端代码目录dao层servicewebpojoUtils 数据库表的设计和准备数据 环境搭建 在pom.xml中配置依赖&#xff08;logback、mybatis、mysql、servlet&#xff09; 注意引入tomcat 前端页面编写 <!DOCTYPE …

Ubuntu 网络配置指导手册

一、前言 从Ubuntu 17.10 Artful开始&#xff0c;Netplan取代ifupdown成为默认的配置实用程序&#xff0c;网络管理改成 netplan 方式处理&#xff0c;不在再采用从/etc/network/interfaces 里固定 IP 的配置 &#xff0c;配置写在 /etc/netplan/01-network-manager-all.yaml 或…