Codeforces Round 949 (Div. 2) A~D

A. Turtle and Piggy Are Playing a Game (思维)

题意:

给出一个整数 x x x ,使得 l ≤ x ≤ r l \le x \le r lxr ,其中 l , r l, r l,r 为给定值。同时保证 2 l ≤ r 2l \le r 2lr
执行以下操作,直到 x x x 变为 1 1 1

  • 选择一个整数 p p p ,使得 p ≥ 2 p \ge 2 p2 p ∣ x p \mid x px (即 x x x p p p 的倍数)。
  • x x x 设置为 x p \frac{x}{p} px ,得分将增加 1 1 1

得分最初为 0 0 0 。询问得分最大为多少。

分析:

2 2 2的增长速度是最慢的,并且题目有 2 × l ≤ r 2 \times l \le r 2×lr,所以答案为 l o g 2 r log_2r log2r向下取整。

代码:

#include <bits/stdc++.h>using namespace std;int main() {int t;cin >> t;while (t--) {int l, r;cin >> l >> r;int ans = __lg(r);cout << ans << endl;}return 0;
}

B.Turtle and an Infinite Sequence (位运算)

题意:

给出一个无限长的序列 a 0 , a 1 , a 2 , … a_0, a_1, a_2, \ldots a0,a1,a2, 。对于每个非负整数 i i i ,初始值为 a i = i a_i = i ai=i
每一秒之后,序列中的每个元素都会同时发生变化。对于每个正整数 i i i a i a_i ai 将变为 a i − 1 ∣ a i ∣ a i + 1 a_{i - 1} \mid a_i \mid a_{i + 1} ai1aiai+1 a 0 a_0 a0 将变为 a 0 ∣ a 1 a_0 \mid a_1 a0a1
给出 m m m,询问 m m m秒之后, a n a_n an的值。

分析:

发现 a n a_n an m m m秒之后的答案为 [ n − m , n + m ] [n-m,n+m] [nm,n+m]这个区间里面所有数的异或和。我们直接枚举答案的二进制位 i i i,判断 i i i能否变成 1 1 1。只需找到第一个 x x x,满足 x ≥ l , x ≤ r , x > > i x \ge l, x \le r, x>>i xl,xr,x>>i & 1 1 1即可。

代码:

#include <bits/stdc++.h>using namespace std;
typedef long long LL;int main() {int t;cin >> t;while (t--) {LL n, m;cin >> n >> m;LL l = max(0LL, n - m);LL r = n + m;LL ans = 0;LL cnt = 0;while (l != r) {cnt++;l >>= 1;r >>= 1;}while (cnt--)r = (r << 1) ^ 1;cout << r << endl;}return 0;
}

C.Turtle and an Incomplete Sequence (位运算)

题意:

给出一个正整数组成的序列 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1,a2,,an但是现在序列不完整了。可能存在任意数量的索引 i i i ,使得 a i a_i ai 变成 − 1 -1 1 。让新序列为 a ′ a' a。保证对于原始序列 a a a ,要么 a i = ⌊ a i + 1 2 ⌋ a_i = \left\lfloor\frac{a_{i + 1}}{2}\right\rfloor ai=2ai+1 成立,要么 a i + 1 = ⌊ a i 2 ⌋ a_{i + 1} = \left\lfloor\frac{a_i}{2}\right\rfloor ai+1=2ai 成立。

换句话说,你需要找到另一个由正整数组成的序列 b 1 , b 2 , … , b n b_1, b_2, \ldots, b_n b1,b2,,bn ,并且:

  • 对于从 1 1 1 n n n 的每个整数 i i i ,如果 a i ′ ≠ − 1 a'_i \ne -1 ai=1 ,则 b i = a i ′ b_i = a'_i bi=ai
  • 对于从 1 1 1 n − 1 n - 1 n1 的每个整数 i i i b i = ⌊ b i + 1 2 ⌋ b_i = \left\lfloor\frac{b_{i + 1}}{2}\right\rfloor bi=2bi+1 b i + 1 = ⌊ b i 2 ⌋ b_{i + 1} = \left\lfloor\frac{b_i}{2}\right\rfloor bi+1=2bi 成立。
  • 对于从 1 1 1 n n n 的每个整数 i i i 1 ≤ b i ≤ 1 0 9 1 \le b_i \le 10^9 1bi109

如果没有满足上述所有条件的序列 b 1 , b 2 , … , b n b_1, b_2, \ldots, b_n b1,b2,,bn ,则需要输出 − 1 -1 1

分析:

我们考虑将操作统一,即满足 b i = b i − 1 / 2 b_i=b_{i-1}/2 bi=bi1/2 或者满足 b i = b i − 1 × 2 b_i=b_{i-1} \times 2 bi=bi1×2 或者 b i = b i − 1 × 2 + 1 b_i=b_{i-1} \times 2+1 bi=bi1×2+1,并将操作转换成在二进制上考虑是将前一个数右移一位还是在末尾填上 0 0 0或者 1 1 1
我们接下来考虑从 x x x变成 y y y至少需要多少个操作,首先求出 x x x, y y y 的二进制最长公共前缀,然后将 x x x通过右移操作变成其最长公共前缀,然后再通过填 1 1 1或者填 0 0 0来变成 y y y。最后剩余的数通过反复乘 2 2 2或者除 2 2 2操作即可。

代码:

#include <bits/stdc++.h>using namespace std;
typedef long long LL;
const LL N = 5e5 + 10;
const LL mod = 1e9 + 7;LL gcd(LL a, LL b) {return b > 0 ? gcd(b, a % b) : a;
}int a[N];void solve() {int n;cin >> n;int bit[n + 5][32];for (int i = 1; i <= n; i++)cin >> a[i];vector<int> pos;int st = 0, en = 0;for (int i = 1; i <= n; i++) {if (a[i] != -1) {if (!st)st = i;pos.push_back(i);for (int j = 0; j < 32; j++) {bit[i][j] = ((a[i] >> j) & 1);}en = i;}}int f = 0;for (int i = st - 1; i >= 1; i--) {if (f == 0) {a[i] = a[i + 1] * 2;} else {a[i] = a[i + 1] / 2;}f ^= 1;}f = 0;for (int i = en + 1; i <= n; i++) {if (i == 1) {a[i] = 2;continue;}if (f == 0) {a[i] = a[i - 1] * 2;} else {a[i] = a[i - 1] / 2;}f ^= 1;}int len = pos.size();for (int i = 0; i < len - 1; i++) {int l = a[pos[i]], r = a[pos[i + 1]];int tmp = l;int len1 = 0, len2 = 0;while (tmp) {tmp /= 2;len1++;}tmp = r;while (tmp) {tmp /= 2;len2++;}int tot = 0;for (int j = 0; j < min(len1, len2); j++) {if (bit[pos[i]][len1 - j - 1] == bit[pos[i + 1]][len2 - j - 1])tot++;elsebreak;}int num = len1 + len2 - 2 * tot;if (pos[i + 1] - pos[i] < num || (pos[i + 1] - pos[i] - num) % 2 != 0) {cout << -1 << endl;return;}int num1 = len1 - tot;int num2 = len2 - tot;int po = pos[i] + 1;for (int j = 0; j < num1; j++) {a[po] = a[po - 1] / 2;po++;}for (int j = 0; j < num2; j++) {if (bit[pos[i + 1]][len2 - tot - j - 1] == 0) {a[po] = a[po - 1] * 2;} else {a[po] = a[po - 1] * 2 + 1;}po++;}int f = 1;for (po; po < pos[i + 1]; po++) {if (f == 1) {a[po] = a[po - 1] * 2;} else {a[po] = a[po - 1] / 2;}f ^= 1;}}for (int i = 1; i <= n; i++) {cout << a[i] << " ";}cout << endl;
}int main() {int t = 1;cin >> t;while (t--) {solve();}return 0;
}

D.Turtle and Multiplication (图论)

题意:

给一个整数 n n n ,并要求构造一个由满足以下条件的整数组成的序列 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1,a2,,an

  • 对于所有 1 ≤ i ≤ n 1 \le i \le n 1in 1 ≤ a i ≤ 3 ⋅ 1 0 5 1 \le a_i \le 3 \cdot 10^5 1ai3105
  • 对于所有 1 ≤ i ≤ j ≤ n − 1 1 \le i \le j \le n - 1 1ijn1 a i ⋅ a i + 1 ≠ a j ⋅ a j + 1 a_i \cdot a_{i + 1} \ne a_j \cdot a_{j + 1} aiai+1=ajaj+1

在所有这些序列中,找出具有最少个不同元素的序列。

分析:

如果我们都选质数,那么两对之间乘积不相同也就等价于两对质数不完全相同。那么将问题转化为在一个完全图上找欧拉路。如果我们只用奇数个质数,那么每个点度是偶数,有欧拉回路。如果用偶数个质数,就要删掉质数数量的一半减一条边,这样才会产生只有两个奇数度的点。

代码:

#include <bits/stdc++.h>using namespace std;
typedef long long LL;
const LL N = 3e5 + 10;
const LL mod = 1e9 + 7;
int n, m, st[N], g[1510][1510];
vector<int> pri;
stack<int> stk;void dfs(int u) {if (g[u][u])g[u][u] = 0, dfs(u);for (int i = 1; i <= m; i++)if (g[u][i])g[u][i] = g[i][u] = 0, dfs(i);stk.push(pri[u]);
}int main() {for (int i = 2; i <= 300000; i++) {if (!st[i])pri.push_back(i);for (int j = i * 2; j <= 300000; j += i)st[j] = 1;}int T;cin >> T;while (T--) {cin >> n;if (n == 1) {cout << 1 << endl;continue;}m = 1;while (m * (m + 1) / 2 - (m % 2 ? 0 : m / 2 - 1) < n - 1)m++;for (int i = 1; i <= m; i++)for (int j = 1; j <= m; j++)g[i][j] = 1;if (m % 2 == 0)for (int i = 3; i <= m; i += 2)g[i][i + 1] = g[i + 1][i] = 0;dfs(1);while (stk.size() && n) {cout << stk.top() << " ";stk.pop();n--;}while (stk.size())stk.pop();cout << endl;}return 0;
}

赛后交流

在比赛结束后,会在交流群中给出比赛题解,同学们可以在赛后查看题解进行补题。

群号: 704572101,赛后大家可以一起交流做题思路,分享做题技巧,欢迎大家的加入。

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

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

相关文章

【Docker系列】跨平台 Docker 镜像构建:深入理解`--platform`参数

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

!力扣102. 二叉树的层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] /*** Definition for…

计算机网络 ——网络层(IPv4地址)

计算机网络 ——网络层&#xff08;IPv4地址&#xff09; 什么是IPv4地址IP地址的分类特殊的IP地址 查看自己的IPv4地址 我们今天来看IPv4地址&#xff1a; 什么是IPv4地址 IPv4&#xff08;Internet Protocol version 4&#xff09;是第四版互联网协议&#xff0c;是第一个被…

电调, GPS与飞塔

电调油门行程校准&#xff1a; 断电-----油门推到最高-------电调上电-------滴滴------油门推到最低---滴滴滴---校准完成。 http://【【教程】油门行程校准&#xff08;航模&#xff0c;电机&#xff0c;电调&#xff09;】https://www.bilibili.com/video/BV1yJ411J7aX?v…

【JS】理解闭包及其应用

历史小剧场 明朝灭亡&#xff0c;并非是简单的政治问题&#xff0c;事实上&#xff0c;这是世界经济史上的一个重要案例。 所谓没钱&#xff0c;就是没有白银。----《明朝那些事儿》 什么是闭包&#xff1f; 闭包就是指有权访问另一个函数作用域中变量的函数 闭包变量存储位置&…

【深度学习】深度学习之巅:在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境

【深度学习】深度学习之巅&#xff1a;在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境 大家好 我是寸铁&#x1f44a; 总结了一篇【深度学习】深度学习之巅&#xff1a;在 CentOS 7 上打造完美Python 3.10 与 PyTorch 2.3.0 环境✨ 喜欢的小伙伴可以点点关注 &#…

有序二叉树java实现

类实现&#xff1a; package 树;import java.util.LinkedList; import java.util.Queue;public class BinaryTree {public TreeNode root;//插入public void insert(int value){//插入成功之后要return结束方法TreeNode node new TreeNode(value);//如果root为空的话插入if(r…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十七)- 微服务(7)

11.1 : 同步调用的问题 11.2 异步通讯的优缺点 11.3 MQ MQ就是事件驱动架构中的Broker 安装MQ docker run \-e RABBITMQ_DEFAULT_USERxxxx \-e RABBITMQ_DEFAULT_PASSxxxxx \--name mq \--hostname mq1 \-p 15672:15672 \-p 5672:5672 \-d \rabbitmq:3-management 浏览器访问1…

6、组件通信详解(父子、兄弟、祖孙)

一、父传子 1、props 用法&#xff1a; &#xff08;1&#xff09;父组件用 props绑定数据&#xff0c;表示为 v-bind:props"数据" &#xff08;v-bind:简写为 : &#xff0c;props可以任意命名&#xff09; &#xff08;2&#xff09;子组件用 defineProps([props&…

LabVIEW电路板性能与稳定性测试系统

LabVIEW电路板性能与稳定性测试系统 概述&#xff1a; 开发基于LabVIEW的电路板性能与稳定性测试系统&#xff0c;通过集成多种测试仪器&#xff0c;实现对电路板的电气性能和长期稳定性的全面评估。系统涵盖了电压、电流、温度等多项参数的监测&#xff0c;并具备自动化测试…

IO多路复用详解

1. 概念 IO多路复用也称IO多路转接&#xff0c;它是一种网络通信的手段&#xff08;机制&#xff09;&#xff0c;通过这种方式可以同时监测多个文件描述符并且这个过程是阻塞的&#xff0c;一旦检测到有文件描述符就绪&#xff08; 可以读数据或者可以写数据&#xff09;程序的…

Pytorch 实现目标检测一(Pytorch 23)

一 目标检测和边界框 在图像分类任务中&#xff0c;我们假设图像中只有一个主要物体对象&#xff0c;我们只关注如何识别其类别。然而&#xff0c;很多时候图像里有多个我们感兴趣的目标&#xff0c;我们不仅想知 道它们的类别&#xff0c;还想得到它们在图像中的具体位置。在…

atomic特质的局限性

为什么在实际的 Objective-C 开发中, 几乎所有的属性都声明为 nonatomic ? 声明为 atomic 的属性我是真的没见过 在实际的 Objective-C 开发中&#xff0c;大多数属性通常声明为 nonatomic&#xff0c;主要原因包括性能考虑和常见的设计模式。具体原因如下&#xff1a; 性能问…

SemiDrive X9H 平台 QT 静态编译

一、 前言 芯驰 X9H 芯片&#xff0c;搭载多个操作系统协同运行&#xff0c;系统实现了仪表、空调、中控、副驾多媒体的四屏驱动控制&#xff0c;在人车智能交互上可以通过显示屏、屏幕触摸控制、语音控制、物理按键控制、车身协议的完美融合&#xff0c;使汽车更智能。让车主…

【前端技术】 ES6 介绍及常用语法说明

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

vulnhub靶机实战_DC-2

下载 靶机下载链接汇总&#xff1a;https://download.vulnhub.com/使用搜索功能&#xff0c;搜索dc类型的靶机即可。本次实战使用的靶机是&#xff1a;DC-2下载链接&#xff1a;https://download.vulnhub.com/dc/DC-2.zip 启动 下载完成后&#xff0c;打开VMware软件&#xf…

2024最新 Jenkins + Docker实战教程(八)- Jenkins实现集群并发构建

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

9.2 Go 接口的实现

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Spark作业运行异常慢的问题定位和分析思路

一直很慢 &#x1f422; 运行中状态、卡住了&#xff0c;可以从以下两种方式入手&#xff1a; 如果 Spark UI 上&#xff0c;有正在运行的 Job/Stage/Task&#xff0c;看 Executor 相关信息就好。 第一步&#xff0c;如果发现卡住了&#xff0c;直接找到对应的 Executor 页面&a…

深度解析:AI Prompt 提示词工程的兴起、争议与未来发展

PART1: 提示词工程的兴起 在人工智能领域中&#xff0c;一个新的领域——提示词工程&#xff08;prompt engineering&#xff09;——开始显露头角。 这个领域的核心在于精心设计输入&#xff0c;以引导AI模型产生特定的、期望的输出。 随着AI技术的飞速发展&#xff0c;特别…