当前位置: 首页 > news >正文

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

题意:按顺序给两排色块,然后可以选择对这相同的色块中进行数字的分配,最后求按下标顺序上面位置的数字减下面位置的数字。
如果不懂,原题链接: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.xdnf.cn/news/145963.html

相关文章:

  • 智慧党建解决方案-1PPT(40页)
  • ThreadLocal详解与实战指南
  • LabVIEW老旧设备控制
  • Apache Spark 源码解析
  • 线程池配置实现多线程快速处理批量数据
  • 动态ip与静态ip的概念、区别、应用场景
  • 统计文件中单词出现的次数并累计
  • 【玩泰山派】7、玩linux桌面环境xfce - (4)使用gstreamer
  • 点云从入门到精通技术详解100篇-基于二次误差和高斯混合模型的点云配准算法
  • 【DE-III】基于细节增强的模态内和模态间交互的视听情感识别
  • LabVIEW轨道交通动力系统性能监控
  • Spring 与 ActiveMQ 的深度集成实践(一)
  • 佳博票据和标签打印:Web网页端与打印机通信 | iOS
  • freecad参数化三维模型装配体解析至web端,切换参数组或修改参数
  • 【维护窗口内最值+单调队列/优先队列】Leetcode 239. 滑动窗口最大值
  • 【数据结构】红黑树原理及实现
  • 如何在奥维互动地图里加载星图云卫星地图
  • 【文献阅读】建立高可信度的阴性样本,改进化合物-蛋白质相互作用预测
  • 《WebGIS之Vue零基础教程》(5)计算属性与侦听器
  • 数据库对比
  • C语言实现贪心算法
  • 嵌入式 C 语言面试核心知识点全面解析:基础语法、运算符与实战技巧
  • 企业网站html源代码 企业网站管理源码模板
  • linux centos7 python3安装
  • docker 代理配置冲突问题
  • 数据结构------C语言经典题目(6)
  • spring OncePerRequestFilter 作用
  • Zynq 7000的PS侧DDR3地址范围及相关信息
  • 《使用 Cesium 加载静态热力图显示的实现步骤》
  • 【LeetCode 热题 100】滑动窗口最大值 / 最小覆盖子串 / 轮转数组 / 缺失的第一个正数