【CF】C. Tokitsukaze and Two Colorful Tapes+C. Where is the Pizza?

https://codeforces.com/contest/1677/problem/C

https://codeforces.com/contest/1670/problem/C

两道很像的的题目,都和环有关


C. Tokitsukaze and Two Colorful Tapes

题目:

思路:

 题意就是给定你两排颜色,要求在相同的颜色填相同的数字,最后让 \sum abs(a[i] - b[i])最大

对于此类两排排列的问题,我们可以想到是否和环有关,观察发现,这两排数字其实可以构成k个环,对于例一有:

1 5 4 3 2 6

5 3 1 4 6 2

环①:1->5->3->4->1 长度为4

环②:2->6->2 长度为2

那么对于环上任意一个数,假设为h[i],那么它的奉献就为 abs(h[i+1] - h[i]) + abs(h[i] - h[i-1])

可以发现,对于任意一个数,它只有以下几种情况

①.奉献为2*x

②.奉献为-2*x

③.奉献为0

用图表示就是

①②如右图所示

对于2点,有奉献p = 2 - 1 + 2 - 3 = 2*2 - 1 - 3

对于4点,有奉献p = 4 - 3 + 4 - 1 = 2*4 - 1 - 3

于是总奉献为 2*2 + 2*4 - 1*2 - 3*2

同理左图也是,而左图中的3点可计算得到奉献为0

因为我们可以这样构造:

对于偶数环,我们考虑用最大值,最小值,次大值,次小值....

对于奇数环,我们和偶数环一样,但是我们最后要空一个不选,因为这个点的奉献为0,我们可以先给考虑其他环用,最后再来考虑(这里有贪心的想法)

那么到最后肯定是这样的形式 n*2 + n-1*2 + n-3*2 ... 0+0-0-0 ... -3*2 - 2*2 - 1*2

我们可以发现对于任意一个环,其正奉献的个数和负奉献的元素一样,即都为[c/2]

其中c为\sum [C.Length/2],C.Length为环的长度

那么根据我们的等差数列求和我们最后来化简一下答案

最后可以得到答案是 2*(n*len - len*len),即2*len*(n-len)

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define ll long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlint vis[100005];
int a[100005];
int b[100005];
int posina[100005];ll getLen(int x)
{if (vis[x]){return 0;}vis[x] = 1;return 1LL + getLen(posina[b[x]]);
}void solve()
{memset(vis, 0, sizeof vis);int n;cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];posina[a[i]] = i;}for (int i = 1; i <= n; i++){cin >> b[i];}ll len = 0;for (int i = 1; i <= n; i++){if (!vis[i]){len += getLen(i) / 2LL;}}cout << 2L * len * (n - len) << endl;
}int main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

C. Where is the Pizza?

题目:

 

思路:

我们观察发现,其实又是两个排列,而且也是可以构成环的,在这道题中我们只是多了一个约束条件,即d[i],其作用是锁定了环的某个元素

为什么可以看出构成环呢?可以看到,对于任意一个数,它的位置只有两种选择,如果对于一个位置确定好了一个数,那么这个位置的另一个数的位置肯定也确定好了,以此类推,到最后肯定会形成一个环

进一步观察发现(其实是打表),我们可以知道,对于任意一个长度大于一的环,无论如何都只能有两种选法,同时如果这个环只要有一个被锁定了,那么就只能有一种选法

所以这道题我们只需要寻找环,如果这个环没有被锁定,且长度大于1,那么就将结果乘2

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define ll long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlconst int MOD = 1e9 + 7;
int a[100005];
int b[100005];
int d[100005];
int posina[100005];
int flag = 0;
ll getlen(int x)
{if (!a[x]){return 0;}a[x] = 0;if (d[x] != 0){flag = 1;}return 1 + getlen(posina[b[x]]);
}void solve()
{int n;cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];posina[a[i]] = i;}    for (int i = 1; i <= n; i++){cin >> b[i];}for (int i = 1; i <= n; i++){cin >> d[i];}ll ans = 1;for (int i = 1; i <= n; i++){if (a[i]){flag = 0;if (getlen(i) > 1 && !flag){ans = ans * 2 % MOD;}}}cout << ans << endl;
}int main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

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

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

相关文章

leetcode0020 - 有效的括号 easy

1 题目&#xff1a;有效的括号 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须…

基于提示驱动的潜在领域泛化的医学图像分类方法(Python实现代码和数据分析)

摘要 医学图像分析中的深度学习模型易受数据集伪影偏差、相机差异、成像设备差异等导致的分布偏移影响&#xff0c;导致在真实临床环境中诊断不可靠。领域泛化&#xff08;Domain Generalization, DG&#xff09;方法旨在通过多领域训练提升模型在未知领域的性能&#xff0c;但…

【STM32】玩转IIC之驱动MPU6050及姿态解算

目录 前言 一.MPU6050模块介绍 1.1MPU6050简介 1.2 MPU6050的引脚定义 1.3MPU6050寄存器解析 二.MPU6050驱动开发 2.1 配置寄存器 2.2对MPU6050寄存器进行读写 2.2.1 写入寄存器 2.2.2读取寄存器 2.3 初始化MPU6050 2.3.1 设置工作模式 2.3.2 配置采样率 2.3.3 启…

【C#】async与await介绍

1. 实例1 1.1 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{static void Main(string[] args){Method1();Method2();Console.ReadKey();}public static…

Gitlab配置personal access token

1.点击左上角个人账号 -> Preferences 2. 点击左边栏 Access Tokens 3. 点击Add new token &#xff0c;输入token名称&#xff0c;勾选权限&#xff08;注意截至日期 “Expiration date” 可不填&#xff09; 4. 创建成功后&#xff0c;显示token信息&#xff0c;复制到本地…

盛铂科技 SLMF315频率综合器200MHz至15GHz 国产频综模块

在当今科技飞速发展的时代&#xff0c;射频技术在众多领域发挥着关键作用&#xff0c;从通信、雷达系统到科研实验&#xff0c;对频率综合器的性能要求日益严苛。以下是关于盛铂科技的 SLMF315 超低相位噪声频率综合器的介绍&#xff1a; SLMF315超低相位噪声0.2至15GHz频率综合…

Java 大视界 -- 基于 Java 的大数据分布式任务调度系统设计与实现(117)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

C++学习之路,从0到精通的征途:入门基础

目录 一.C的第一个程序 二.命名空间 1.namespace的价值 2.命名空间的定义 3.命名空间使用 三.C的输入与输出 1.<iostream> 2.流 3.std(standard) 四.缺省参数 1.缺省参数的定义 2.全缺省/半缺省 3.声明与定义 ​五.函数重载 1.参数个数不同 2.参数类型不…

用低代码平台集成人工智能:无需专业开发也能实现智能化

引言&#xff1a;人工智能的普及与企业需求 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;越来越多的企业开始意识到其在提升运营效率、优化客户体验和推动业务创新方面的巨大潜力。从智能客服到自动化决策支持&#xff0c;从数据分析到个性化推荐&#x…

【Git】linux搭建Gitea配置mysql数据库

WindowsServer搭建内网Gitea【中文更方便使用】 1. 安装Gitea # 下载 wget https://dl.gitea.io/gitea/1.23.5/gitea-1.23.5-linux-amd642. 创建用户 # 创建 gitea 用户 sudo adduser --system --shell /bin/bash --comment Git Version Control --create-home --home-dir /…

RLHF-GRPO

RLHF&#xff08;Reinforcement Learning fromHuman Feedback&#xff0c;人类反馈强化学习&#xff09; 目的&#xff1a;为了让大模型的输出更贴合人类的偏好&#xff0c;拟合有用真实无害的结果。 思维导图 方法对比 发布时间&#xff1a;最初是采用PPO&#xff0c;但是后…

PIPC:基于博世冰羚Iceoryx的功能安全增强型通信框架

ICEORYX: 博世在量产ADAS领域装配率长期占据市场前三的份额,他们对于如何将自动驾驶数据高效流转的需求更为迫切,为此在大神Michael Phnl带领下,专门为自动驾驶开发了一套中文名叫“冰羚”,英文名ICEORYX的中间件。 如上面所说,大量自动驾驶相关的感知数据需要在整个系…

css梯形tab

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Tab 示例</…

LInux 文件系统

目录 认识磁盘 初识inode 磁盘的概念 磁盘分区和格式化介绍 文件系统EXT2的存储方案 Data Blocks : 数据表&#xff0c;存文件内容的区域 inode Table Block bitmap inode bitmap Group Descriptor Table Super Block 如何理解目录 文件的三个时间 认识磁盘 文件…

Linux网络编程

网络&#xff1a;不同主机&#xff0c;进程间通信 目的 1&#xff0c; 解决主机之间的硬件层面的互联互通 2&#xff0c;解决主机间软件层面的互联互通 IP地址&#xff1a;区分不同主机&#xff08;软件地址&#xff09; MAC地址&#xff1a;硬件地址 端口号&#xff1a;区分同…

【JavaScript】07-APIs - DOM + BOM

本文目前介绍JS中的API的知识点&#xff0c;操作案例后续补充。 目录 1. web API基本认知 2. API 作用和分类 2.1 DOM 2.1.1 DOM树 2.1.2 DOM对象 2.1.2.1 操作DOM对象 ① 选中这个标签后才能操作 1. 选择匹配的第一个元素 2. 选择多个元素 3. 获取1个可直接修改 4…

postgresql

作者本人也搭建了一个docker镜像加速器&#xff0c;需要的朋友随时联系作者&#xff0c;镜像加速嘎嘎快&#xff0c;快速解决docker镜像拉不下的问题&#xff0c;文章最后带有作者wx&#xff0c;先好好学习吧。 一&#xff1a;PostgreSQL数据库 1.1&#xff1a;PostgreSQL介绍和…

推荐几款优秀的PDF转电子画册的软件

当然可以&#xff01;以下是几款优秀的PDF转电子画册的软件推荐&#xff0c;内容简洁易懂&#xff0c;这些软件都具有易用性和互动性&#xff0c;适合不同需求的用户使用。​ ❶ FLBOOK&#xff5c;在线创作平台 支持PDF直接导入生成仿真翻页电子书。提供15主题模板与字体库&a…

Spring Boot使用JDBC /JPA访问达梦数据库

Spring Boot 是一个广泛使用的 Java 框架&#xff0c;用于快速构建基于 Spring 的应用程序。对于达梦数据库&#xff08;DMDB&#xff09;的支持&#xff0c;Spring Boot 本身并没有直接内置对达梦数据库的集成&#xff0c;但你可以通过一些配置和依赖来支持达梦数据库。 以下…

2025牛客寒假算法基础集训营6

A.复制鸡 思路&#xff1a;比较简单&#xff0c;略。 void solve() {int n, m, k;cin >> n;int last -1, ans 0;for (int i 0; i<n; i){int x;cin >> x;if (x ! last){ans;}last x;}cout << ans << endl; } B.好伙计猜拳 思路&#xff1a;这…