【补题】Codeforces Round 789 (Div. 1)C. Tokitsukaze and Two Colorful Tapes

news/2025/5/22 1:50:36/

题意:按顺序给两排色块,然后可以选择对这相同的色块中进行数字的分配,最后求按下标顺序上面位置的数字减下面位置的数字。
如果不懂,原题链接:Problem - 1677C - Codeforces

思路:

1.首先确实不难想到环,或者说类似于并查集的联通、关系等。样例给出的也很明显,不同色块的匹配最终都会以环的形式连接。并且环与环之间没有联系。

2.问题就是怎么样分配成最大,但其实具体的分配是我们不需要管的,我们只要知道无论怎么分配,在一个环中,单个点自身对于答案的贡献只能是+w或者-w,这是由绝对值决定的。通过整体的方式对相同色块的考虑

一种色块只能对答案造成-2w和+2w和0的贡献,那么从贪心考虑,让大的数字都贡献+2w一定比分配成0或者-2w好
且因为任何一个-2w的色块都会匹配上一个+2w的色块,所以+2w的色块的数量一定为环色块总数\left \lfloor \frac{sum}{2} \right \rfloor,-2w也同理\left \lfloor \frac{sum}{2} \right \rfloor,最后会有一个sum%2 的0贡献色块

综上记录每个环能最多选出的色块,借助求和公式,化简得到2*(n-k)*k

代码:   参考题解 CF1677C 【Tokitsukaze and Two Colorful Tapes】 - 洛谷专栏

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define int128 __int128
#define endl '\n'
#define IOS                  \ios::sync_with_stdio(0); \cin.tie(0);              \cout.tie(0);
const int N = 2e5 + 10;
const int INF = 1e18;
const int MOD = 998244353;int fid(int x, vector<int> &f)
{if (x == f[x])return x;return f[x] = fid(f[x], f);
}void solve()
{int n;cin >> n;vector<int> col1(n + 2);vector<int> col2(n + 2);vector<int> f(n + 2);for (int i = 1; i <= n; i++){cin >> col1[i];f[i] = i;}for (int i = 1; i <= n; i++){cin >> col2[i];}for (int i = 1; i <= n; i++){int u = fid(col1[i], f);int v = fid(col2[i], f);if (u != v)f[u] = v;}vector<int> cont(n + 2);for (int i = 1; i <= n; i++){cont[fid(i, f)]++;}int ans = 0;int sum = 0;for (int i = 1; i <= n; i++){if (i == f[i])ans += cont[i] / 2, sum++;}cout << sum << endl;cout << 2 * ans * (n - ans) << endl;
}signed main()
{IOS;int t = 1;cin >> t;while (t--){solve();}
}


http://www.ppmy.cn/news/1622642.html

相关文章

《拆掉思维里的墙》 古典-摘抄

不知不觉,后知后觉,当知当觉,先知先觉 工具: 1 微小计划,定到足够小,小到不可能失败 2 复盘:将做过的事情重新推演,从中总结成功的经验,发现失败的教训 很多人之所以没有长进,其实是在不断重复错误,不断掉进同一个坑,复盘可以帮助你克服自己的惯性 操作流程:…

【KWDB 创作者计划】_深度学习篇---数据获取

文章目录 前言一、公开数据集资源库1. 综合型数据集平台Kaggle Datasets (https://www.kaggle.com/datasets)Google Dataset Search (https://datasetsearch.research.google.com)UCI Machine Learning Repository (https://archive.ics.uci.edu/ml) 2. 计算机视觉专用ImageNet…

Coding Practice,48天强训(23)

Topic 1&#xff1a;打怪&#xff08;回合数与刀数、先后手关系&#xff09; 登录—专业IT笔试面试备考平台_牛客网 #include <bits/stdc.h> using namespace std;int main() {int t;cin >> t;while (t--) {int h, a, H, A;cin >> h >> a >> H…

系统架构师2025年论文《论软件架构评估2》

论软件系统架构评估 v2.0 摘要: 某市医院预约挂号系统建设推广应用项目是我市卫生健康委员会 2019 年发起的一项医疗卫生行业便民惠民信息化项目,目的是实现辖区内患者在辖区各公立医疗机构就诊时,可以通过多种线上渠道进行预约挂号,提升就医体验。我作为系统架构师参与此…

FreeRTOS学习笔记【10】-----任务上下文切换

1 概念性内容 开机到调度需要经历的步骤有&#xff1a; 系统初始化任务创建启动调度器上下文切换时间分片任务执行 1.1 任务本质 FreeRTOS 的 任务&#xff08;Task&#xff09;本质上就是一个运行在任务自己的栈区中无限循环的函数 一段上下文&#xff08;context&#x…

Float32、Float16、BFloat16

我们先介绍 Float32、Float16、BFloat16 的 浮点数表示方法 然后根据浮点数表示&#xff0c;来分析总结他们是怎么控制 精度和 数值范围 的 最后再来对比的说明 Float32、Float16、BFloat16 的 应用场景 和 硬件支持 1、浮点数的表示方法 Float32 &#xff1a; 单精度浮点数…

正大模型视角下的市场结构判断逻辑

正大模型视角下的市场结构判断逻辑 在多数交易策略中&#xff0c;结构识别往往先于方向判断。以正大的数据研判风格为例&#xff0c;其核心逻辑是&#xff1a;价格行为不能孤立解读&#xff0c;必须结合时间与成交效率来判断当前结构的有效性。 例如&#xff0c;一个上涨过程&…

【EDA】Multi-Net Routing(多网布线)

第六章&#xff1a;Multi-Net Routing&#xff08;多网布线&#xff09; 在VLSI物理设计中&#xff0c;多网布线&#xff08;Multi-Net Routing&#xff09;的目标是同时为多个网络&#xff08;Nets&#xff09;规划路径&#xff0c;避免布线资源冲突&#xff08;如导线重叠、…