寒假思维训练day15 牛客练习赛121

牛客练习赛ABCD题解,更新一个题解作为今天的任务收尾。


寒假思维训练day15

摘要:

Part1:B题,B-You Brought Me A Gentle Breeze on the Field_牛客练习赛121 (nowcoder.com)

Part2:  C题,C-氧气少年的水滴 2_牛客练习赛121 (nowcoder.com)

part3:  D题,D-氧气少年的 LCM_牛客练习赛121 (nowcoder.com)


Part1  B题:

1、题意:

2、题解:

1、假设先手,后手的状态是:F[0], F[1], 当F[i] = 1是胜利,等于0是失败,初始时石子数为n,以及题目中的m

2、首先如果最初始是1那必然先手必败,如果初始不为1,但是m >= n - 1那么先手必胜,总的来说就是:

\left\{\begin{matrix} F[0] = 0, F[1] = 1, n = 1 \\ F[0] = 1, F[1] = 0, m >= n - 1\\ else \end{matrix}\right.

3、现在我们讨论else的情况,我们证明一定是由有连取机会的胜:

假设x拥有连取的机会,y没有,但是x输给了y

把x,y每个局面的操作抽象成点,构造成图,当如果找到一条x败给y的路径,也就是x再某个阶段一定处于必败态,因为每次操作必然是至少可以是1(奇数可以改变任何状态,偶数加 + 奇数 = 奇数,奇数 + 奇数 = 偶数),x必然可以先改变自己的状态为必胜态,此时所有输给y的路径都可以改变成必赢路径,所以必胜。

3、代码(cpp):

#include <bits/stdc++.h>
#define int long long 
using namespace std; 
constexpr int N = 1010;
int n, m, p; void solve() {cin >> n >> m >> p; if(n == 1) {cout << "YangQiShaoNian" << endl;return;}else if(n == 2 || m >= n - 1) {cout << "XiaoNian" << endl; return; }else {if(p == 1) cout << "YangQiShaoNian" << endl; else cout << "XiaoNian" << endl;}
}
signed main() {int ts = 1; cin >> ts; while(ts -- ) solve(); return 0;
}

Part2  C题:

1、题意:

2、题解:

我们直接从p这个位置向两边模拟即可,每次维护最左边界和最右边界,时间复杂度最多是O(n * 10), 2e5的范围绰绰有余, 注意边界最后一定要是0和n + 1才能直接输出,否则只能是0。

3、代码(cpp):

#include <bits/stdc++.h>
#define int long long 
using namespace std; 
constexpr int N = 1e6 + 10;
int n, p; 
int a[N], st[N];   
void solve() {cin >> n >> p; for(int i = 0; i <= n + 1; i ++ ) a[i] = 0, st[i] = 0;for(int i = 1; i <= n; i ++ ) cin >> a[i];if(a[p] + 1 < 10) {cout << 0 << ' ' << 0 << endl;return; }int l = p - 1, r = p + 1; int lc = 1, rc = 1;int op = n * 11;while(op --) {if(lc + a[l] >= 10 && l >= 1) lc -= (10 - a[l]), a[l] = 10;  if(rc + a[r] >= 10 && r <= n) rc -= (10 - a[r]), a[r] = 10; if(a[l] >= 10 && l >= 1) lc ++, rc ++, l --;if(a[r] >= 10 && r <= n) lc ++, rc ++, r ++;}if(l == 0) cout << lc << ' '; else cout << 0 << ' '; if(r == n + 1) cout << rc << endl; else cout << 0 << endl;
//     cout << endl;
}
signed main() {int ts; cin >> ts; while(ts -- ) solve(); return 0;
}

Part3  D题:

1、题意:

最初给定一个a,b 每次可以朝着集合中添加gcd(a, b)a + b, 并且a和b是独立的个体,构造一个得到Lcm(a, b)的方案。

2、题解:

首先,这道题并不是可以任意构造的,因为时间是1秒,也就是构造一个尽量少步骤的方案,所以我们来挖掘一下一些性质:

 (1) Lcm(a, b) = a * b / gcd(a,b) = r_a * gcd(a, b) * r_b * gcd(a,b) / gcd(a,b) \\= r_a * r_b * gcd(a, b) = Aim * gcd(a, b) \\

此时我们得到了关键的东西,我们将其进行二进制拆解,Aim * gcd(a, b) = (2^{j_1} + 2^{j_2} + 2^{j_3} + ... + 2^{j_k}) * Aim,j_iAim的各个二进制位。

据此,我们不妨先往集合中添加两个gcd(a, b), 因为每次一个一个加非常数字非常大,考虑倍增优化:

d = gcd(a, b) \\ have \left \{ d, d \right \} \\ d * 2^1 = d + d\\ d * 2^2 = d * 2^1 + d * 2^1\\ ....\\ d * 2^n = d * 2^{n - 1} + d * 2^{n - 1}

此时我们不妨处理出来所有Aim的二进制位上的数与gcd(a,b)的乘积,最后通过累加得到Aim * gcd(a, b),也就是Lcm(a,b)

3、代码(cpp):

#include <bits/stdc++.h>
#define int long long 
using namespace std; 
constexpr int N = 1e6 + 10;
int n, m; 
void solve() {int a, b; cin >> a >> b; if(a > b) swap(a, b); if(b % a == 0) {cout << 0 << endl;return; }int d = __gcd(a, b); int aim = a * b / d / d;  int c = -1, t = -1;int cnt = 0; for(int i = 0; i <= 62; i ++ )if(aim >> i & 1ll) {if(t == -1) t = i; c = i;++ cnt; }
//     cout<<cnt<<endl;cout << 2 * (c + 1) + cnt - 1 << endl;cout << 1 << ' ' << a << ' ' << b << endl;cout << 1 << ' ' << a << ' ' << b << endl;for(int i = 1; i <= c; i ++ ) cout << 2 << ' ' << d * (1ll << (i - 1)) << ' ' << d * (1ll << (i - 1)) << endl,cout << 2 << ' ' << d * (1ll << (i - 1)) << ' ' << d * (1ll << (i - 1)) << endl;if(cnt >= 2) {int state = d * (1ll << t);for(int i = t + 1; i < 62; i ++ ) {if(aim >> i & 1ll) { cout << 2 << ' ' << state << ' ' << d * (1ll << i) << endl;state += d * (1ll << i); }}}}
signed main() {int ts; cin >> ts; while(ts -- ) solve(); return 0;
}

感谢观看!

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

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

相关文章

一文看懂nginx

nginx与F5的区别&#xff1f; nginx的主要功能是&#xff1f; nginx的优缺点&#xff1f;nginx如何实现负载均衡&#xff1f; Nginx和F5是两种不同的网络服务器和负载均衡器&#xff0c;它们有一些重要的区别。 1. 区别&#xff1a; - Nginx是一个开源的高性能的Web服务器…

职言圈 | 小伙年薪95w,女朋友父母却爱搭不理,如今上岸国家电网,人不到,叔叔阿姨吃饭都不动筷子...

在职场中&#xff0c;每个人都经历着不同的起伏和挑战。有时候&#xff0c;我们会面临着职业生涯上的起伏&#xff0c;但正是这些经历让我们成长&#xff0c;让我们更加坚韧。 就像这位网友一样&#xff0c;他在过去的一年里经历了美团L8的职位和年薪95W&#xff0c;却面临着女…

Sentinel解密:SlotChain中的SLot大揭秘

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Sentinel解密&#xff1a;SlotChain中的SLot大揭秘 前言SlotChain简介&#xff1a;Sentinel的第一道防线入场仪式&#xff1a;SlotChain中的初始化SlotSlotChain的执行流程&#xff1a;从规则解析到流…

解析应对策略:共建安全、高效的公链与应用生态的关键要素

每天五分钟讲解一个互联网知识&#xff0c;大家好我是啊浩说模式Zeropan_HH 在区块链的生态系统中&#xff0c;公链与应用链是两个紧密相连但又各具特色的领域。公链作为基础设施&#xff0c;为整个区块链世界提供了基础支持&#xff0c;而应用链则是基于公链构建的各类应用&am…

数据可视化练习

文章目录 试题示例 试题示例 绘制下图所示的表格 根据下表的数据&#xff0c;将班级名称一列作为x轴的刻度标签&#xff0c;将男生和女生两列的数据作为刻度标签对应的数值&#xff0c;使用bar()函数绘制下图所示的柱形图。 方式一 import numpy as np import matplotlib.p…

地理空间分析7——地理网络分析与Python

目录 写在开头1. 网络分析基础1.1 地理空间中的网络结构1.1.1 网络的概念1.1.2 网络的组成1.1.3 地理网络的类型1.2 Python中创建和分析地理网络的基础知识2. 最短路径分析2.1 常见算法2.2 具体案例2.2.1 Dijkstra算法2.2.2 A*算法2.2.3 Bellman-Ford算法2.2.4 Floyd-Warshall算…

【华为OD机试真题2023CD卷 JAVAJS】推荐多样性

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 推荐多样性 知识点字符串滑窗 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略: 1. 各个列表…

Kotlin快速入门系列3

Kotlin条件、循环控制 IF条件控制 与Java类似&#xff0c;一个if语句可包含布尔表达式和一条或多条语句。 fun compare(a:Int,b:Int) : Int{//常规传统用法var max aif (b>a) max breturn max//使用elsevar mMax : Intif(a>b){mMax a}else{mMax b}return mMax//使…

Unity中URP下额外灯的距离衰减

文章目录 前言一、额外灯的距离衰减二、DistanceAttenuation函数的传入参数1、distanceSqr2、distanceAndSpotAttenuation3、_AdditionalLightsAttenuation4、GetPunctualLightDistanceAttenuation函数三、DistanceAttenuation函数的程序体 前言 在上一篇文章中&#xff0c;我…

一个新的springboot-vue项目如何启动起来

一个新的springboot-vue项目如何启动起来 1.导入mysql 打开yml文件修改数据库密码 名称 用户名 2.打开pom.xml配置maven依赖 尽量换成自己使用过的版本号&#xff0c;或者打开中央仓库搜索相关内容版本号&#xff1a;https://central.sonatype.com/ 注解为黄色 说明工程…

《合成孔径雷达成像算法与实现》Figure5.17

clc clear close all距离向参数 R_eta_c 20e3; % 景中心斜距 Tr 25e-6; % 发射脉冲时宽 Kr 0.25e12; % 距离向调频率 Fr 7.5e6; % 距离向采样率 Nrg 256; % 距离线采样点数 Bw abs(Kr*Tr); …

@JsonIgnore的使用及相关问题的解决

目录 1 前言 2 对比及其使用方法 3 遇到的相关问题及解决方法 1 前言 在我们编写的后端项目中&#xff0c;有时候可能需要将某个实体类以JSON格式传送给前端&#xff0c;但是其中可能有部分内容我们并不想传送&#xff0c;这时候我们选择将这部分内容变成Null&#xff0c;这…

今日前端十个知识点——CSS篇(二)

1、伪元素和伪类 伪元素&#xff1a;在内容元素的前后插入额外的元素或样式&#xff0c;但是这些元素实际上并不在文档中生成&#xff0c;只在外部显示可见&#xff0c;不会在文档的源代码中找到它们 伪类&#xff1a;将特殊的效果添加到特定选择器上&#xff0c;它是已有元素…

Flutter 点击空白处关闭软键盘,点击非TextField 关闭软键盘的方法

1&#xff1a;点击空白处(非控件上)关闭软键盘。 此方法有个问题&#xff0c;就是点击非空白区域&#xff0c;不会关闭软键盘&#xff0c;比如点击旁边的其他按钮&#xff0c;则软键盘还在。只适合点击空白处关闭软键盘 在 main.dart 入口 build 中增加 builder: (context, ch…

一文速通Python添加、修改和删除字典元素

添加、修改和删除字典元素是 Python 中使用字典时常见的操作。字典是一种无序、可变的数据结构&#xff0c;用于存储键值对。在 Python 中&#xff0c;对字典元素进行添加、修改和删除操作可以帮助我们动态地管理数据&#xff0c;方便地根据需求对字典进行更新和维护。 一、添…

蓝桥杯练习-简单2

程序猿圈子里正在流行一种很新的简写方法:对于一个字符串&#xff0c;只保留首尾字符&#xff0c;将首尾字符之间的所有字符用这部分的长度代替。例如internation-alization 简写成i18n&#xff0c;Kubernetes (注意连字符不是字符电的一部分)简写成 K8s, Langiao 简写成 L5o 等…

图文解析交流慢充原理和握手协议以及OBC工作原理

1.接口定义 2.硬件连接原理 2.obc工作原理 OBC里面包括单片机1和单片机2&#xff0c;DSP。 有的厂家方案只有一个单片机&#xff0c;CC/CP部分直接用DSP实现。交流桩的ARM控制K1、K2&#xff0c;S1。单片机1控制K3。单片机2控制S2。DSP控制K4。BMS控制PDU里面的K5&#x…

地理空间分析6——地理空间数据挖掘与Python

目录 写在开头1. 聚类分析1.1 聚类分析基本概念K均值算法步骤1.2 Python中的地理空间聚类分析1.3 应用场景举例2. 分类问题2.1 将地理数据分为不同类别的方法2.1.1 地理数据分类概述2.1.2 监督学习与无监督学习2.1.3 特征工程2.2 Python中实现地理空间分类问题2.3 应用场景举例…

使用Opencv-python库读取图像、本地视频和摄像头实时数据

使用Opencv-python库读取图像、本地视频和摄像头实时数据 Python中使用OpenCV读取图像、本地视频和摄像头数据很简单&#xff0c; 首先需要安装Python&#xff0c;然后安装Opencv-python库 pip install opencv-python然后在PyCharm或者VScode等IDE中输入对应的Python代码 一…

Maven讲解

介绍 Maven是一个流行的构建工具和项目管理工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目报告生成。Maven通过提供一致的项目结构、自动化的构建过程和强大的依赖管理&#xff0c;简化了项目的开发和维护过程。 下面是一些Maven的主要特点和用途&#xff1a; 项…