【题解】CF1956

news/2024/11/6 13:14:34/文章来源:https://www.cnblogs.com/yeyou26/p/18529763

CF1956A

简要题意

  • \(n\) 个人玩一个游戏,把这 \(n\) 个人分别编号为 \(1\)\(n\)
  • 每一轮,编号为 \(a_1, a_2, \ldots, a_k\) ( \(a\) 序列递增 ) 的人会被踢出这个游戏,剩下的人会补齐空位并重新从 \(1\) 开始编号。
  • 当某一轮没有人被踢出时,游戏结束,剩下没有被踢出的人成为赢家。
  • 现在请你求出最后会有多少人成为赢家。
    \(q\) 次询问,对 \(q\)\(n\) 分别给出答案。
    \(n,q \leq 100\)

Solution

  • 注意到只要 \(a_1\) 这个位置有人游戏就一定结束不了,所以游戏结束时最多剩下 \(a_1-1\) 个人。
  • 注意到 \(a_1\) 这个位置之前的人永远都不会被踢出去,所以前 \(a_1-1\) 个人永远不会被踢。
  • 显然答案最多为 \(n\),故 \(ans=min(n,a_1-1)\)
  • 单次询问时间复杂度 \(O(1)\)
    总时间复杂度 \(O(q)\)

CF1956B

简要题意

  • 你和 Nene 在玩一个纸牌游戏,这个游戏由 \(2n\) 张牌组成,每张上面都写着一个在 \(1\)\(n\) 之间的数字,每个数字有两张。
  • 游戏开始前,你和 Nene 都会随机获得其中的 \(n\) 张牌。
  • 游戏的玩法如下:
    你和 Nene 轮流出牌(你是先手)直到所有的牌都被打出。
    每一个回合,(假设这个回合出牌的人是你)你需要打出一张牌,并把它放在桌子上(一开始桌子是空的)。如果在你打出这张牌的时候桌子上已经有了一张写着同样数字的牌,那么你得一分(Nene 出牌的回合同理)。
  • Nene 足够聪明,她一定会采取最优策略:使得她自己的得分最高的情况下让你的得分最低。
  • 现在给出你得到的牌 \(a_1, a_2, \ldots, a_n\) 请你求出你最高可以获得多少分。
  • \(t\) 组数据。
    \(1\le \sum n \le 2 \times 10^5\)
    \(1\le a_i \le n\)

Solution

  • 注意到对于每一种牌,我们拿到的情况只有三种:拿到两张,拿到一张,拿到零张
  • 显然双方拿到的“一张牌”个数相等
  • 又因为双方总牌数相等,所以双方拿到的“两张牌”和“零张牌”个数也相等
  • 对于拿到两张的牌:第一次打出一定不会得分,第二次打出一定得分,所以这种牌对结果的贡献是一定的
  • 对于拿到零张的牌:显然这种牌对结果没有任何贡献,所以这种牌对结果的贡献是一定的
  • 对于拿到一张的牌:可以证明:我们在任意时刻打出这张牌,Nene 都可以立即打出一张相同的牌使自己得分,也就是说我们无法使用“一张牌”得到任何一分。
  • 考虑如何使用”一张牌“来得分:在 Nene 打出第一张”一张牌“前,一直只打”两张牌“。然而,前面证明了双方的”两张牌“数量相等,且我方先手,也就是说上述情况不可能发生。
  • 综上所述,\(ans=两张牌的种类数\)
  • 实现非常简单,开桶记录即可
    时间复杂度 \(O(\sum n)\)

CF1956C

简要题意

  • 有一个 \(n\times n\) 的矩阵,初始时所有位置均为 \(0\) ,现在要对其进行若干次操作,操作有两种:
  1. 选择一个正整数 \(i~(1\le i \le n)\) 和一个 \(1\) ~ \(n\) 的排列 \(p_1,p_2,\cdots,p_n\),将每个 \(a_{i,j}~(1\le j \le n)\) 同时赋值为 \(p_j\)
  2. 选择一个正整数 \(i~(1 \le i \le n)\) 和一个 \(1\) ~ \(n\) 的排列 \(p_1,p_2,\cdots,p_n\),将每个 \(a_{j,i}~(1\le j \le n)\) 同时赋值为 \(p_j\)
  • 需要进行不多于 \(2\times n\) 次操作,使得数组中元素的和最大。
  • 输出最终数组中元素的和、操作次数和操作方案。
  • 一共 \(t~ (1\le t \le 500)\) 组数据,每组数据中 \(1\le n\le 500\)\(1\le \sum n^2 \le 5\times 10^5\)

Solution

  • 大胆猜想最优情况一定是这样的
1 2 3 4 5 
2 2 3 4 5
3 3 3 4 5
4 4 4 4 5
5 5 5 5 5
  • 注意在这种情况的基础之上无论怎么操作都不能使答案更优,考虑如何构造出这种方案
  • 注意到第一行和第一列是排列,所以我们可以最后安置这两行/列,现在成功缩小问题为构造出右下角 \(4\times 4\) 大小的矩阵
  • 注意到新矩阵的第一行和第一列也可以通过排列构造出来,现在发现这是一个递归子问题,逐层递归即可得解,操作次数正好为 \(2\times n\),当然,最内层的操作可以少一次
  • 实现:从右下角开始,逐层向外扩展即可
  • 当然可以先构造出矩阵,再一个一个累加得到元素和,但这并不优雅,考虑 \(O(1)\) 计算元素和 \(S\)
  • \(S=\sum_{i=1}^{n} {i(2i-1)}=2\sum_{i=1}^{n}i^2-\sum_{i=1}^{n}i\)
  • 瓶颈是求 \(\sum_{i=1}^{n} i^2\)
  • \(i^2=i^2-i+i=i(i-1)+i=C_i^2+C_i^1\)
  • \(\sum_{i=1}^{n} i^2=C_1^1+C_2^1+C_3^1+\cdots+C_n^1\)
  • \(\quad \quad \quad \quad \quad+C_2^2+C_3^2+\cdots+C_n^2\)
  • \(=C_{n+1}^{2}+C_{n+1}^{3}=\frac{n(n+1)(2n+1)}{6}\)
  • 整理得:\(S=n(n+1)*(2n+1)/3-n(1+n)/2\)

CF1956D

简要题意

  • 给定长度为 \(n\) 的序列 \(a_i\)
  • 满足 \(1\leq n\leq 18,0\leq a_i\leq 10^7\)
  • 定义一次操作为将 \([l,r]\) 区间赋值为 \(a_l,\ldots,a_r\)\(\mathrm{mex}\)
  • 求在 \(5\times 10^5\) 次操作之内序列和的最大值,并给出操作序列。

Solution

  • 首先需要有极强的注意力:注意到操作等价于:区间赋值,值为区间长度
  • 如果注意到了这点,显然问题转化为将序列划分为若干段,每段的价值为 \(max(\sum_{i=l}^r a_i,(r-l+1)^2)\)
  • 这个东西就很简单了,区间 DP 即可,时间复杂度 \(O(n^2)\)
  • 考虑如何将一个区间的值全都变为区间长度,并保证总的操作次数不大于 \(5\times 10^5\)
  • 首先把区间每个数都弄成 \(0\),这是简单的
  • \(f(x)\) 表示将长度为 \(x\) 的序列从全 \(0\),变为从 \(1\)\(x\) 的递增序列需要多少次操作
  • 显然 \(f(1)=1\)
  • 考虑 \(f(x)\) 的递推式与对应的构造方案
  • 若要构造长度为 \(x\) 的递增序列,则先构造长度为 \(x-1\) 的递增序列,操作次数为 \(f(x-1)\)
  • 此时加上一个 \(0\),再进行一次操作,使所有数都变成 \(x\)
  • 此时只保留最后一个数,前面的数全都弄成 \(0\),再构造一次长度为 \(x-1\) 的递增序列即可,操作次数为 \(f(x-1)\)
  • 综上:\(f(x)=2f(x-1)+1\)
  • 容易得到通项公式:\(f(x)=2^{x+1}-1\),在 \(n\) 取 18 时,操作次数为 \(f(17)+1=131073\)
  • 综上,按上述方法一定可以在操作次数限制内构造出解

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

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

相关文章

newstarctf WP存档

Week 1 Pwn Real Login Game Overwrite Gdb Reverse Web Crypto Misc Week 2 Pwn Reverse Web Crypto Misc Week 3 Pwn 不思議なscanf One Last B1te ezcanary Easy_Shellcode Reverse 011vm simpleAndroid SMc_math flowering_shrubs SecertsOfKawaii PangBai 过家家(3) 取啥…

Ollama AI 框架缺陷可能导致 DoS、模型盗窃和中毒

近日,东方联盟网络安全研究人员披露了 Ollama 人工智能 (AI) 框架中的六个安全漏洞,恶意行为者可能会利用这些漏洞执行各种操作,包括拒绝服务、模型中毒和模型盗窃。知名网络安全专家、东方联盟创始人郭盛华表示:“总的来说,这些漏洞可能允许攻击者通过单个 HTTP 请求执行…

还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!

还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!前言 程序员的终极追求是什么?当系统流量大增,用户体验却丝滑依旧?没错!然而,在大量文件传输、数据传递的场景中,传统的“数据搬运”却拖慢了性能。为了解决这一痛点,Linux 推出了 零拷贝 技术,让数据高效传输几乎无需…

【日记】碰到了一个洗钱嫌疑很高的客户(755 字)

正文早上有个客户来开户,总感觉他洗钱的嫌疑很高。1. 没有财务章,甚至没有财务职位,会计工作是找的代理记账公司;2. 客户经理尽职调查时,注册地和实际经营地址不一致,3. 开企业网银觉得还不够,说外勤多,要开手机网银;4. 觉得每天 20 笔,总额 100 万的限额有些低;5. …

C++ 逆向之 forward 函数与完美转发

在进行 std::forward 函数的讲解之前,需要知道 std::move 的运行原理,还不是很清楚的朋友建议先看一下前置知识,本次内容是基于 std::move 内容的基础上进行讲解: C++ 逆向之 move 函数 然后来讲解我们今天的主角:std::forward 函数与完美转发。 一、std::forward 函数的作…

中电金信:企业数据赋能效果差,科学试错体系了解一下?

​ Wuhu,咨询专题第五期内容来啦~ 继先后讲解了企业数字化转型 过程中的价值创造、运营变革 以及平台化建设等难题如何解决后本期我们一起来关注 企业科学试错体系构建事情是这样的 👇 👇 👇 随着金融数字化转型的深入推进,以大数据为基础的智能化应用大量涌现,使得数…

【华为笔试-3】HJ20 密码验证合格程序

【华为笔试-3】HJ20 密码验证合格程序HJ20 密码验证程序输入: 021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000输出: OK NG NG OK注:输入结束后有中止结束标志EOF【这个原题给的时候无说明,自己跑他的用例和看论坛看出来的】题解: 要点有三个,分别是:长度超过八位、包含三…

记Linux使用异常2

麒麟v10系统开机后提示如下信息,并进入initramfs模式,[0.224166][ 0l dmi: Firmware registration failed, [0.936010][ 0] serial8250 serial8250.0: unable to register port at index 1 (IOFFFFF10204000000 MEM0 IRQ0): -22 [1.829735][ 0] i8042: i8042 controller self…

SVN集成ExcelMerge

在SVN中对比表格差异时,如果只是一个sheet的CSV表格,SVN自带的diff效果也很好,如果是多个Sheet的xlsx表格,,SVN自带的diff效果就很差 ExcelMerge是一个在Windows平台下比对Excel的工具,当Excel存在多个Sheet时也能很好的支持差异的比对,配合上svn可以很好的查看策划的数…

homeassistant docker搭建并接入米家设备

homeassistant docker搭建教程: 下载镜像 docker pull homeassistant/home-assistant:latest 找个顺眼的地方建立目录,如/etc/dockerdata/homeassistant创建容器 mkdir /etc/dockerdata mkdir /etc/dockerdata/homeassistant然后执行命令: docker run -d \--name homeassist…

例题7.3

import numpy as np from scipy.interpolate import lagrange import matplotlib.pyplot as plt import matplotlib yx = lambda x: 1/(1+x**2)def fun(n):x = np.linspace(-5, 5, n+1)p = lagrange(x, yx(x)) # n次插值多项式return px0 = np.linspace(-5, 5, 100)plt.rc(fo…

Windows10 移动热点无法连接

一:windows10 移动热点手机无法连接 1.查看原因手机连接不上,看看是不是一直在现实获取ip地址2.网卡设置当打开移动热点时候,会有一张网卡 名称为 Microsoft Wi-Fi xxxxx打开你的上网网卡-属性->共享(右上角)->开启连接共享->选择Microsoft Wi-Fi 那张网卡连接成…