Codeforces Round 943 (Div. 3) 题解 缺F和G2

A题: Maximize?

题目大意:

给你一个整数 x, 要求你找出任意一个 y ,y \epsilon [1, x)。使得gcd(x, y) + y最大。

思路一:暴力

数据范围小,直接暴力。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
void solve() {int x; cin >> x;int res = 0, id = 1;for (int y = 1; y < x; y ++ ) {if (__gcd(x, y) + y > res) {res = __gcd(x, y) + y;id = y;}}cout << id << endl;
}
signed main() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int tt; cin >> tt;while (tt -- ) solve();return 0;
}

思路二 :动脑子

gcd(x, y) = gcd(x, x - y) \leq x - y

\therefore gcd(x, y) + y \leq x

我们只要令 y = x - 1,那么就可以使得原式子的值为 x。
所以输出 x - 1即可。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
void solve() {int x; cin >> x;cout << x - 1 << endl;
}
signed main() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int tt; cin >> tt;while (tt -- ) solve();return 0;
}

B题: Prefiquence 

题目大意:

给你两个二进制字符串 𝑎 和 𝑏 。二进制字符串是由字符 "0 "和 "1 "组成的字符串。

您的任务是确定最大可能的数字 𝑘 ,使得长度为 𝑘 的字符串 𝑎 的前缀是字符串 𝑏 的子序列。

思路:贪心

如果b中的要取出来跟a的前缀去匹配,那么是不是越早出现越好?
这样就可以让后面空出更多能够跟a去匹配了。

双指针,时间复杂度O(n + m)

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
void solve() {int n, m; cin >> n >> m;int j = 0, ans = 0;string a, b; cin >> a >> b;for (int i = 0; i < n; i ++ ) {while (j < m && b[j] != a[i]) j += 1;if (j == m) break;ans += 1, j += 1;}cout << ans << endl;
}
signed main() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int tt; cin >> tt;while (tt -- ) solve();return 0;
}

C题: Assembly via Remainders 

题目大意:

给你一个数组 X_{2}, X_{3}, X_{4}...X_{n}。你的任务是找出任意一个数组 a_{1}, a_{2}, a_{3}...a_{n},其中:

  • 1≤a_{i}10^{9} 代表所有 1≤𝑖≤𝑛 。
  • x_{i} = a_{i} % a_{i - 1}

思路:

我们要构造a_{i},如果a_{i - 1}a_{i}大的话,根据模的计算,我们是不是可以就直接放入X_{i}了?

那我们每次构造出的a_{i},都让它等于a_{i - 1} + X_{i},让数组a一直递增,是不是就符合要求了?

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
void solve() {int n; cin >> n;vector<int> res;int last = 600;res.push_back(last);for (int i = 1; i < n; i ++ ) {int x; cin >> x;res.push_back(res[i - 1] + x);}for (auto c : res) cout << c << ' ';cout << endl;
}
signed main() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int tt; cin >> tt;while (tt -- ) solve();return 0;
}

D题: Permutation Game 

题目大意:

见链接。

思路:

如果我们站的位置是最大的,那么我们就不需要移动了对吧,因为可以一直站在上面得到最大的分数。

否则我们就去下一个位置去看看,能不能获得更多的得分。

遍历的话因为是排列,移动是一个环,所以我们最多的遍历次数是 n

用了set避免重复绕环

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
void solve() {int n, k, pb, ps; cin >> n >> k >> pb >> ps;vector<int> p(n + 1), a(n + 1);int maxv = -1;for (int i = 1; i <= n; i ++ ) cin >> p[i];for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= n; i ++ ) if (maxv > a[i]) maxv = a[i];int score1 = k * a[pb], score2 = k * a[ps];int now1 = score1, now2 = score2;int cnt = 0;unordered_set<int> f1;while (a[pb] != maxv && cnt < k) {cnt += 1;now1 -= (k - cnt) * a[pb];f1.insert(pb);pb = p[pb];if (f1.count(pb)) break;now1 += (k - cnt) * a[pb];score1 = max(score1, now1);}cnt = 0;f1.clear();while (a[ps] != maxv && cnt < k) {cnt += 1;now2 -= (k - cnt) * a[ps];f1.insert(ps);ps = p[ps];if (f1.count(ps)) break;now2 += (k - cnt) * a[ps];score2 = max(score2, now2);}if (score1 > score2) cout << "Bodya\n";else if (score1 == score2) cout << "Draw\n";else cout << "Sasha\n";
}
signed main() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int tt; cin >> tt;while (tt -- ) solve();return 0;
}

E题: Cells Arrangement 

题目大意:

在 n x n 的方格中找到 n 个点,使得它们之间的曼哈顿距离种类最多。

思路:

我们发现样例中有连起来一块的,还有斜着放着的。

可证:先放(1, 1), 再放(1, 2),最后全部斜着放是能取完所有的距离情况的,这是最大,符合要求。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
void solve() {int n; cin >> n;cout << "1 1" << endl;cout << "1 2" << endl;for (int i = 3; i <= n; i ++ ) {cout << i << ' ' << i << endl;}
}
signed main() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int tt; cin >> tt;while (tt -- ) solve();return 0;
}

G1:Division + LCP (easy version) 

题目大意:

见链接。

思路:

极其类似砍木头,是二分答案。

每次我们去找字符串 mid 个长度的前缀在整个字符串中的出现次数,

如果大于等于 k,那么 l = mid,否则 r = mid

找的过程(不会Z函数),用了KMP,

时间复杂度O(nlogn)

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
vector<int> nt;
void build(string &s) {int n = s.size();vector<int> pi(n);for (int i = 1; i < n; i ++ ) {int j = pi[i - 1];while (j > 0 && s[i] != s[j]) j = pi[j - 1];if (s[i] == s[j]) j += 1;pi[i] = j;}nt = pi;
}
int KMP(string &t, string &s) {build(s);int n = t.size(), m = s.size(), j = 0;int last = -1e9, ans = 0;for (int i = 0; i < n; i ++ ) {while (j > 0 && t[i] != s[j]) j = nt[j - 1];if (t[i] == s[j]) j += 1;if (j == m) {int head = i - m + 1;if (head >= last + m) {ans += 1;last = head;}}}return ans;
}
void solve() {int n, k; cin >> n >> k >> k;string s; cin >> s;int l = 0, r = n / k + 1;while (l + 1 != r) {int mid = l + r >> 1;string p = s.substr(0, mid);if (KMP(s, p) >= k) l = mid;else r = mid;}cout << l << endl;
}
signed main() {ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int tt; cin >> tt;while (tt -- ) solve();return 0;
}

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

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

相关文章

MySQL —— 库的基本操作

一、数据库的增删查改 &#xff08;1&#xff09;创建 语句&#xff1a;create database db_name;&#xff08;db_name是自定义的数据库名字&#xff09; &#xff08;2&#xff09;删除 语句&#xff1a;drop database dp_name;&#xff08;dp_name是要被删除的数据库的名字…

【智能算法】冠豪猪优化算法(CPO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;M Abdel-Basset等人受到冠豪猪防御行为启发&#xff0c;提出了冠豪猪优化算法&#xff08;Crested Porcupine Optimizer, CPO&#xff09;。 2.算法原理 2.1算法思想 …

【Cpp】类和对象#构造函数 析构函数

标题&#xff1a;【Cpp】类和对象#构造函数 析构函数 水墨不写bug &#xff08;图片来源于网络&#xff09; 正文开始&#xff1a; &#xff08;一&#xff09;构造函数 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然名称叫构造&#xff0c;但…

区块链 | IPFS:Merkle DAG(进阶版)

&#x1f98a;原文&#xff1a;Merkle DAGs: Structuring Data for the Distributed Web &#x1f98a;写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留存学习。 1 Merkle DAG 当我们在计算机上表示图时&#xff0c;必须通过提供节点和边的具体表示来编码我们的数据…

常用SQL命令

应用经常需要处理用户的数据&#xff0c;并将用户的数据保存到指定位置&#xff0c;数据库是常用的数据存储工具&#xff0c;数据库是结构化信息或数据的有序集合&#xff0c;几乎所有的关系数据库都使用 SQL 编程语言来查询、操作和定义数据&#xff0c;进行数据访问控制&…

yudao-cloud微服务系统系统模块+后台管理系统成功运行

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列文章目录 第一章 芋…

C语言之位操作符:<<、>>、、|、^、~,以及原码反码补码和例题详解

目录 前言 一、原码、反码、补码 二、移位操作符 三、位操作符&#xff1a;&、|、^、~ 四、经典例题分析&#xff1a; 总结 前言 本文将详细介绍C语言中左移操作符<<&#xff0c;右移操作符>>&#xff0c;按位与&&#xff0c;按位或|&#xff0c;按位异或^…

【Spring AI】09. ETL 管道

文章目录 ETL PipelineAPI 概述入门指南ETL 接口和实现DocumentReaderJsonReaderTextReaderPagePdfDocumentReaderParagraphPdfDocumentReaderTikaDocumentReader DocumentTransformerTextSplitterTokenTextSplitterContentFormatTransformerKeywordMetadataEnricherSummaryMet…

【通信中间件】Fdbus HelloWorld实例

Fdbus实例教程 Fdbus简介 Fdbus 全称 Fast Distributed Bus&#xff08;高速分布式总线&#xff09;&#xff0c;提供IPCRPC功能。适用于多种OS&#xff1a; LinuxQNXAnroidOSWindow Fdbus本质是Socket&#xff0c;IPC基于Unix domain socket&#xff0c;RPC基于TCP。使用G…

MathType打开的窗口太多 MathType说打开窗口太多无法复制怎么解决

在数学文档编辑中&#xff0c;MathType作为一款常用的数学公式编辑工具&#xff0c;使用过程中&#xff0c;我们常常会遇到一些问题&#xff0c;比如MathType打开的窗口过多导致软件运行缓慢甚至崩溃&#xff0c;以及在复制过程中出现“打开窗口太多&#xff0c;无法复制”的提…

241 基于matlab的Dijkstra算法进行路径规划

基于matlab的Dijkstra算法进行路径规划。可根据实际情况输入障碍物和起止点坐标信息&#xff1b; 输出避碰最短路径&#xff1b; 能够利用切线图算法对障碍物区域进行环境建模&#xff0c;设置障碍物的位置和区域。利用Dijkstra算法进行路径规划。程序已调通&#xff0c;可直接…

细说SVPWM原理及软件实现原理,关联PWM实现

细说SVPWM原理及软件实现原理&#xff0c;关联PWM实现 文章目录 细说SVPWM原理及软件实现原理&#xff0c;关联PWM实现1. 前言2. 基础控制原理回顾2.1 FOC 原理回顾2.2 细说 SVPWM2.2.1 矢量扇区计算2.2.2 矢量作用时间计算 2.2.3 如何理解 U4 U6 2/3Udc?2.2.4 如何理解 U4m…

文件传送协议

壹、文件传输协议FTP 一、FTP简介 文件传送协议FTP曾是互联网上使用最广泛的协议&#xff1b; 在互联网发展的早期阶段&#xff0c;用FTP传送文件约占整个互联网的通信量的三分之一&#xff1b;知道1995年&#xff0c;www的通信量才首次超过FTP。 FTP实现的是通过网络实现异…

GaussDB数据库事务管理

一、引言 事务管理是数据库系统中至关重要的一部分&#xff0c;它确保了数据库的一致性和可靠性。在GaussDB数据库中&#xff0c;事务管理不仅遵循传统的ACID特性&#xff0c;还提供了一些高级功能。本文将深入探讨GaussDB数据库事务管理的各个方面。 二、事务的基本概念 2.1…

机器学习:深入解析SVM的核心概念【四、软间隔与正则化】

软间隔与正则化 问题一&#xff1a;优化目标函数是如何得到的&#xff1f;得到的过程是怎样的&#xff1f;问题二&#xff1a;拉格朗日乘子法计算详细过程问题三&#xff1a;KKT条件求解过程问题四&#xff1a;结构风险最小化&#xff08;SRM&#xff09;的原理 在前面的讨论中…

Rust Turbofish 的由来

0x01 什么是 Turbofish 我们运行如下 Rust Snippet&#xff1a; fn main() {let numbers: Vec<i32> vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];let even_numbers numbers.into_iter().filter(|n| n % 2 0).collect();println!("{:?}", even_numbers); }不出意…

Android 设置头像 - 相册拍照

Android开发在个人信息管理中&#xff0c;如果设置头像&#xff0c;一般都提供了从相册选择和拍照两种方式。下午将针对设置用户头像相册和拍照两种方式的具体实现进行详细说明。 在实际实现过程中需要使用到权限管理&#xff0c;新版本的Android需要动态申请权限&#xff0c;权…

React Context

Context https://juejin.cn/post/7244838033454727227?searchId202404012120436CD549D66BBD6C542177 context 提供了一个无需为每层组件手动添加 props, 就能在组件树间进行数据传递的方法 React 中数据通过 props 属性自上而下(由父及子)进行传递&#xff0c;但此种用法对…

Matlab|二阶锥松弛在配电网最优潮流计算中的应用

目录 一、主要内容 二、部分代码 三、程序代码 四、下载链接 一、主要内容 最优潮流计算是电网规划、优化运行的重要基础。首先建立了配电网全天有功损耗最小化的最优潮流计算模型&#xff1b;其次结合辐射型配电网潮流特点建立支路潮流约束&#xff0c;并考虑配电网中的可…

macOS sonoma 14.4.1编译JDK 12

macOS sonoma 14.4.1编译JDK 12 环境参考文档开始简述问题心路历程着手解决最终解决(前面有点啰嗦了&#xff0c;可以直接看这里) 记录一次靠自己看代码解决问题的经历(总之就是非常开心)。 首先&#xff0c;先diss一下bing&#xff0c;我差一点就放弃了。 环境 macOS sonom…