CerealCode

news/2024/9/25 11:57:41

GYM 105310 C

题目描述

\(N\) 个煎饼店围成一圈,第 \(i\) 个店中有 \(p_i\) 个煎饼。接下来两只红熊猫会进行以下操作:

  • 两只熊猫分别选择一个不同的店 \(a,b\)。第一只先选。
  • 接着第一个熊猫选择一个不为 \(b\) 的店,从 \(a\) 开始沿着一条不经过 \(b\) 的路线走到该店,并把路径上的店中的煎饼全部吃掉。
  • 然后第二个熊猫选择一个没被第一个熊猫经过的店,从 \(b\) 开始沿着一条不经过第一只熊猫经过的店的路线走到该店,并把路径上的店中的煎饼全部吃掉。

两只熊猫都想最大化自己吃的煎饼数量,求第一只熊猫会吃多少个煎饼。

思路

我们考虑枚举 \(a\),并看第二只熊猫会怎么做。

假设此时第二只熊猫已经选好 \(b\) 了,那么此时在第一只熊猫面前有两条路,第一只熊猫肯定会把这条路上能吃的吃完,并且选择煎饼更多的那条。此时第二只就只能吃更少的那条。

所以第二只熊猫得到的煎饼 \(f(b)\) 是一个单峰函数,因为这是两个单调函数的 \(\min\)。我们就可以使用二分,在峰的位置是最后一个 \(f(b)-f(b-1)\ge 0\) 的位置。通过二分出的 \(b\) 就可以求出第一只熊猫的煎饼数。

空间复杂度 \(O(N)\),时间复杂度 \(O(N\log N)\)

代码

#include<bits/stdc++.h>
using namespace std;
using ll = long long;const int MAXN = 300001;int t, n, a[MAXN];
ll sum[MAXN], ans;ll Calc(int a, int b) {return min(sum[b] - sum[a], sum[a + n - 1] - sum[b - 1]);
}int Binary_Search(int x) {int l = x + 1, r = x + n - 1;for(; l < r; ) {int mid = (l + r + 1) >> 1;(Calc(x, mid) - Calc(x, mid - 1) >= 0 ? l = mid : r = mid - 1);}return l;
}void Solve() {cin >> n;for(int i = 1; i <= n; ++i) {cin >> a[i];a[n + i] = a[2 * n + i] = a[i];sum[i] = sum[i - 1] + a[i];}for(int i = n + 1; i <= 3 * n; ++i) {sum[i] = sum[i - 1] + a[i];}ans = 0;for(int i = 1; i <= n; ++i) {int x = Binary_Search(i);x -= (x > 2 * n ? 2 : (x > n ? 1 : 0)) * n;if(x < i) {ans = max({ans, sum[i] - sum[x], sum[x + n - 1] - sum[i - 1]});}else {ans = max({ans, sum[x - 1] - sum[i - 1], sum[i + n] - sum[x]});}}cout << ans << "\n";
}int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);for(cin >> t; t--; Solve()) {}return 0;
}

GYM 105310 D

题目描述

给定两个字符串 \(s,t\),我们定义字母 \(x\) 的值为其在字母表中的下表(a\(0\))。我们还定义:

  • 一个字母 \(x\)反转为值为 \(25-x\) 的字母。
  • 一个字母 \(x\)相对为值为 \((x+13)\bmod 26\) 的字母。

每次你可以将一个区间变成他的反转或相对,求将 \(s\) 变为 \(t\) 的最少次数。如果不行输出 \(-1\)

思路

推一推便可以发现,先做反转再做相对和先做相对再做反转是一样的,而且这两种操作只有可能做 \(0/1\) 次。

所以令 \(dp_{0/1,0/1,i}\) 表示考虑将前 \(i\) 个字符变相同,最后一个位置是/否做反转,是/否做相对的最少次数。

转移时,如果上一个位置没做反转,但当前做了,那么要多进行一次操作,如果上一个位置没相对,但当前相对了,那么也要多进行一次操作。

时空复杂度均为 \(O(N)\)

代码

#include<bits/stdc++.h>
using namespace std;const int MAXN = 1000001, INF = 2 * MAXN;int n, dp[2][2][MAXN];
string s, t;int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >> s >> t;s = ' ' + s, t = ' ' + t;for(int i = 0; i <= n; ++i) {for(bool op : {0, 1}) {for(bool op2 : {0, 1}) {dp[op][op2][i] = INF;}}}dp[0][0][0] = 0;for(int i = 1; i <= n; ++i) {for(bool op : {0, 1}) {for(bool op2 : {0, 1}) {int x = ((op ? 25 - (s[i] - 'a') : (s[i] - 'a')) + op2 * 13) % 26;if(x == t[i] - 'a') {for(bool lop : {0, 1}) {for(bool lop2 : {0, 1}) {dp[op][op2][i] = min(dp[op][op2][i], dp[lop][lop2][i - 1] + (op && !lop) + (op2 && !lop2));}}}}}}int ans = min({dp[0][0][n], dp[0][1][n], dp[1][0][n], dp[1][1][n]});cout << (ans == INF ? -1 : ans);return 0;
}

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

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

相关文章

DNS正向解析和反向解析的区别

在网络世界中,域名系统(DNS)起着至关重要的作用,它就如同网络世界的导航地图,帮助我们在浩瀚的数字海洋中准确找到目标。而在DNS中,正向解析和反向解析是两个重要的概念,它们有着明显的区别。 首先,正向解析是将域名转换为IP地址的过程。当我们在浏览器中输入一个网址,…

DNS云解析和普通解析一样吗

在当今数字化时代,网络的稳定与高效运行至关重要。域名系统(DNS)作为互联网的基础设施之一,其解析服务的质量直接影响着用户的网络体验。近年来,DNS云解析逐渐兴起,与传统的普通解析相比,它们之间存在着显著的区别。 首先,在可靠性方面,DNS云解析具有明显优势。普通解…

【学习笔记】数学证明方法

持续更新中持续更新中最值定理前提条件: 函数 \(f(x)\) 在区间内是连续的在满足前提的情况下,设区间上界为 \(a\),下界为 \(b\) 那么函数 \(f(x)\) 一定能取到区间 \((a,b)\) 内的所有值介值定理前提条件: 函数 \(f(x)\) 在区间内是连续的当区间 \([a,b]\) 上界为 \(A\),下…

【YashanDB知识库】多表更新报错 YAS-04344 multi-table update is not supported

本文内容来自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7369204.html?templateId=1718516 【问题分类】功能使用 【关键字】YAS-04344,UPDATE,multi-table update,MERGE INTO 【问题描述】 在崖山环境执行类似以下语法进行多表更新报 YAS-04344 multi-…

【YashanDB知识库】查询YashanDB表空间使用率

本文转自YashanDB官网,具体内容请见https://www.yashandb.com/newsinfo/7369203.html?templateId=1718516 【问题分类】功能使用 【关键字】表空间,使用率 【问题描述】YashanDB使用过程中,如何查询表空间的使用率 【问题原因分析】需要查询相应的YashanDB系统表,计算表空…

QT C++ 自学积累 『非技术文』

QT C++ 自学积累 『非技术文』最近一段时间参与了一个 QT 项目的开发,使用的是 C++ 语法,很遗憾的是我之前从来没有接触过 C++ ,大学没有开过这堂课,也没用自己学习过,所有说上手贼慢,到现在为止其实也不是很清楚具体的开发技巧,毕竟是参与,东一复制西一粘贴的,就拉倒…

cameralink卡设计原理图:287-基于FMC接口的1路Base cameralink输入1路Base cameralink输出子卡

基于FMC接口的1路Base cameralink输入1路Base cameralink输出子卡 一、板卡概述 该板卡是我公司自主研发的1路Base cameralink输入,1路Base cameralink输出的FMC子卡,LPC-FMC连接器。FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所…

Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg解决办法

安装docker-compose时候。出现错误 1、在线拉取太费劲。 最后使用的离线安装、、 参考内容。. github手动下载文件:https://github.com/docker/compose/releases/tag/1.25.0-rc4 选择-86版本的内容 将文件上传到/usr/local/bin/ 目录下,重命名为docker-compose,修改文件权限…