news 2026/7/1 16:04:47

B. Decidophobia(Codeforces Round 1105 (Div. 1))

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
B. Decidophobia(Codeforces Round 1105 (Div. 1))

B. Decidophobia 题解

思路

g_i表示第i个人是否收到礼物:

  • g_i = 1:收到礼物;
  • g_i = 0:没有收到礼物。

考虑一个有向关系i -> j,其中ji的视野内。

  • 如果i收到礼物、j没收到礼物,贡献是+a_i
  • 如果i没收到礼物、j收到礼物,贡献是-a_i
  • 两人状态相同,贡献是0

这三种情况都可以统一写成:

a_i * (g_i - g_j)

所以总幸福值为:

sum_i a_i * (2d * g_i - sum_{j in view(i)} g_j)

把含有同一个g_i的项合并。由于视野关系是对称的,ji的视野内等价于ij的视野内,因此第i个人的选择系数为:

c_i = 2d * a_i - sum_{j in view(i)} a_j

总幸福值就变成:

sum_i c_i * g_i

每个g_i都可以独立选择:

  • 如果c_i > 0,让第i个人收到礼物,答案增加c_i
  • 如果c_i <= 0,不送给第i个人更优。

因此答案是:

sum_i max(0, c_i)

剩下的问题是快速求每个人视野内2d个人的权值和。

因为是环,可以把数组复制一遍,然后用前缀和求:

  • 顺时针d个人:i + 1 ... i + d
  • 逆时针d个人:i + n - d ... i + n - 1

这里使用0下标。

正确性证明

对任意一对有视野关系的人ij,从第i个人视角产生的贡献只取决于g_ig_j

(g_i, g_j)分别为(1, 0)(0, 1)(1, 1)(0, 0)时,a_i * (g_i - g_j)分别等于a_i-a_i00,与题目定义完全一致。

因此总贡献可以写为所有有向视野关系上的a_i * (g_i - g_j)之和。

展开后,第i个人自己收到礼物时,会从自己的2d个视野对象中得到2d * a_i的正系数;同时,如果第i个人收到礼物,会让所有能看到他的人产生负项。由于视野关系对称,能看到第i个人的人正好也是第i个人视野内的人,所以负系数为视野内所有人的权值和。

所以第i个人是否收到礼物只影响线性项c_i * g_i,其中:

c_i = 2d * a_i - sum_{j in view(i)} a_j

所有人的选择互相独立。若c_i > 0,取g_i = 1最优;若c_i <= 0,取g_i = 0不劣。因此算法得到的sum_i max(0, c_i)就是最大总幸福值。

复杂度

每个测试用例只需要构造一次长度为2n的复制数组和前缀和,并线性扫描所有人。

时间复杂度:O(n)

空间复杂度:O(n)

参考代码

#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intT;cin>>T;while(T--){intn,d;cin>>n>>d;vector<longlong>a(n);for(inti=0;i<n;++i){cin>>a[i];}vector<longlong>doubled(2*n);for(inti=0;i<2*n;++i){doubled[i]=a[i%n];}vector<longlong>pref(2*n+1,0);for(inti=0;i<2*n;++i){pref[i+1]=pref[i]+doubled[i];}longlonganswer=0;for(inti=0;i<n;++i){longlongclockwise=pref[i+d+1]-pref[i+1];longlongcounter_clockwise=pref[i+n]-pref[i+n-d];longlongseen_sum=clockwise+counter_clockwise;longlongcoefficient=2LL*d*a[i]-seen_sum;if(coefficient>0){answer+=coefficient;}}cout<<answer<<'\n';}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 16:04:38

AMD Ryzen处理器免费调试神器:5分钟学会SMU Debug Tool完整指南

AMD Ryzen处理器免费调试神器&#xff1a;5分钟学会SMU Debug Tool完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: h…

作者头像 李华
网站建设 2026/7/1 16:00:09

长大隧道 FM 无线应急广播全覆盖系统

一、系统概述随着高速公路、城市快速路路网持续完善&#xff0c;千米级长大隧道、曲线隧道、隧道群数量不断增多。车辆驶入隧道后&#xff0c;山体、混凝土衬砌会完全阻隔 87-108MHz 调频广播信号&#xff0c;车载收音机出现无声音、杂音、断频等问题&#xff0c;驾驶员无法接收…

作者头像 李华
网站建设 2026/7/1 15:59:04

测试左移与质量内建:从需求到代码的质量防线

前言"测试就是等开发提测后开始测"——这是传统测试的典型思维。但现实是&#xff1a;提测后发现的Bug&#xff0c;修复成本是需求阶段的50-100倍。更扎心的是&#xff0c;很多Bug根本不是测试能测出来的——需求理解偏差、架构设计缺陷、代码逻辑错误&#xff0c;这…

作者头像 李华
网站建设 2026/7/1 15:54:21

线上问题排查

线上问题精准定位&#xff1b;es问题排查&#xff1a;应用报错 es访问超时&#xff0c;部分人员定位 代码查询时间范围太大&#xff0c;超过3个月了&#xff0c;es索引按照天创建&#xff1b;经过仔细观察es 监控&#xff0c;发现有一个节点 cpu 使用率异常&#xff0c;cpu使用…

作者头像 李华
网站建设 2026/7/1 15:52:40

传世无双官方下载指南 2026 最新入口|零氪金币长期积攒方案,不靠交易也能支撑全套养成

《传世无双》官方正版下载渠道严正公示 《传世无双》由安徽游昕网络正版授权运营&#xff0c;深度复刻经典传世端游中州大世界&#xff0c;完整保留战法道铁三角、元神合击、全域打宝、沙城争霸等核心玩法&#xff0c;坚持公平透明的长线运营准则&#xff0c;是传世老玩家公认的…

作者头像 李华