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

题解:P14118 [SCCPC 2021] Hotpot

题解:P14118 [SCCPC 2021] Hotpot

题意

给定 \(T\) 组测试数据,每组测试数据情景如下:

\(0\)\(n-1\)\(n\) 位游客,\(k\) 种火锅食材,\(m\) 次操作,第 \(i\) 次操作(\(0 \le i < m\))是由 \(i \mod n\) 号游客执行。每位游客有自己喜欢的食材 \(a_i\)\(1 \le a_i \le k\)),初始幸福值均为 \(0\),火锅为空。

操作规则:

执行操作的游客 \(t\) ,若其最喜欢的食材 \(a_t\) 已经在火锅中,则 \(t\) 会吃掉所有 \(a_t\),自身幸福值 \(+1\),否则 \(t\) 会向火锅中放入 \(1\)\(a_t\),自身幸福值不变。

请你输出每位游客的幸福值。

数据规模与约定

\(1 \le T \le 10^3\)

\(1 \le n \le 10^5,1 \le k \le 10^5,1 \le m \le 10^9\)

\(1 \le a_i \le k\)

所有测试数据 \(\sum \limits _{i=1} ^T n_i \le 2 \times 10^5,\sum \limits _{i-1} ^T k_i \le 2 \times 10^5\)

题解

做法一 直接模拟

std::map 维护火锅,可以发现时间复杂度是 \(O(m)\),但是 \(m\) 可能会到达 \(10^9\) 级别,在 #2 测试点会 TLE。

做法二 数学方法

通过对题目的观察,我们可以发现如下:

\(1.\) 食材之间具有独立性:食材之间不会互相影响。

\(2.\) 单个食材具有独一无二的操作序列:

对于食材 \(x\) ,它的操作序列是 \(O_x=[O_0,O_1,\cdots,O_{k_x-1}]\)\(k_x\) 为喜欢 \(x\) 的游客数)。所以,所有对 \(x\) 的操作,本质是执行对 \(x\) 的操作序列。

\(3.\) 操作具有奇偶性规律:

关于食材 \(x\) 的操作序列 \(O_x\),分析在序列下标(\(0\) 开始)上的操作效果:

  • 下标为偶数,可以发现在奇数次时已经把食材吃掉了,所以只能向火锅里添加食材,对幸福值没有贡献。
  • 下标为奇数,可以发现在偶数次时已经添加了食材,所以需要执行吃掉的操作,幸福值 \(+1\)

所以,根据我们的发现,可以对算法进行建模:

把食材 \(x\) 的操作拆成完整轮次不完整轮次,分别进行计算(具体看代码)。

CODE

#include <bits/stdc++.h>
using namespace std;
/*====================*/
using ll=long long;
/*====================*/
#define endl '\n'
/*====================*/
void Solve()
{int n,k,m;cin>>n>>k>>m;vector<int> a(n);for(auto& i:a)cin>>i;unordered_map<int,vector<int>> mp;// 按喜欢的食材分组for(int i=0;i<n;i++){mp[a[i]].push_back(i);	} vector<int> h(n,0);// 记录幸福值for(auto it=mp.begin();it!=mp.end();it++){int kx=it->second.size();// 喜欢这个食材的人数 ll cnt_op=0;// 该食材操作的总次数// 计算每个游客在 m 次操作中出现的总次数 for(auto i:it->second){if(i>=m)continue;// 游客 i 的首次操作已经超过 mcnt_op+=(m-1-i)/n+1; } if(cnt_op==0)continue;// 无操作直接跳过// 拆分完成轮次和剩余轮次int full=cnt_op/kx;int rem=cnt_op%kx;// 处理完整轮次的贡献if(kx%2==0)// 食材操作序列长度为偶数:奇数索引操作(吃食材)每轮贡献1次{for(int j=0;j<kx;j++){if(j&1){h[it->second[j]]+=full;}}}else // 食材操作序列长度为奇数:轮次奇偶影响贡献{for(int j=0;j<kx;j++){if(j&1){h[it->second[j]]+=(full+1)/2;}else{h[it->second[j]]+=full/2;}}}// 处理剩余操作的贡献int base=(1LL*full*kx)%2;for(int j=0;j<rem;j++){if((base+j)&1){h[it->second[j]]++;}}}for(int i=0;i<n;i++){cout<<h[i]<<" ";} cout<<endl;
}
/*====================*/
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int T=1;cin>>T;while(T--)Solve();return 0;
}

注:本文已被 luogu 审核通过至P14118 题解区。

http://www.hskmm.com/?act=detail&tid=26544

相关文章:

  • 编程笔记 - C++ 引用和指针的区别
  • 题解:P14127 [SCCPC 2021] K-skip Permutation
  • 题解:[P11184 带余除法]
  • 10 8
  • 2025双氧水厂家权威推荐榜:优质生产与稳定供应实力之选
  • 英国AI数据中心发展规划:技术挑战与产业反馈
  • 2025 年工业风机厂家最新推荐排行榜:涵盖离心高温防腐耐磨防爆等类型设备实力厂商精选高温/防腐/耐磨/防爆/除尘/不锈钢/锅炉风机厂家推荐
  • 2025 年拉力试验机厂家最新推荐榜单:聚焦专精特新企业技术实力与口碑,助力钢铁、线缆、轨道交通等行业精准选购
  • 2025 年最新推荐!种植牙医院权威榜单:聚焦连锁品牌与万级手术室,助您精准选靠谱口腔机构西宁种植牙口腔医院/西宁种植牙齿美容/西宁种植牙美容医院推荐
  • 高考数学易错考点01 | 临阵磨枪 - 教程
  • 2025 年西宁口腔医院最新推荐排行榜:实力解析与全周期口腔服务指南西宁口腔医院/西宁口腔美容/西宁口腔整形/西宁口腔正畸/西宁口腔修复推荐
  • 2025 年试验机厂家最新推荐榜单:专精特新企业深度解析,含疲劳 / 压力 / 液压万能等设备优质厂家水泥压力/压剪/锚链拉伸整形机/链条拉伸整形机厂家推荐
  • 2025 年最新推荐西安路灯厂家排行榜:市政 / LED / 智慧 / 太阳能 / 农村路灯优质企业全景指南
  • 2025 最新红绿灯厂家推荐排行榜:实力厂家技术与口碑深度解析,交通信号设备优选指南交通信号/路口红绿灯厂家推荐
  • 2025 土工材料厂家最新推荐榜:中铁合作厂商领衔,技术 / 案例双维度厂家深度甄选指南土工布/土工膜/土工格栅/复土工合膜厂家推荐
  • 2025 年帐篷源头厂家最新推荐排行榜:涵盖应急救灾 / 户外充气 / 露营充气 / 野营等品类,精选实力企业助采购
  • Claude Code完整安装部署指南:支持Windows/Linux/macOS三平台详细教程
  • 2025 杀虫公司最新推荐榜:权威筛选公司,靶向消杀与长效质保选购全指南
  • 2025 年电缆桥架生产厂家最新推荐榜单:聚焦北方 / 河北区域及多类型桥架,精选优质品牌深度解析瓦楞/防火/模压/镀锌桥架厂家推荐
  • rtthread学习笔记系列 -- 13 线程
  • 2025 年淋膜机厂家最新推荐排行榜:覆盖纸张 / 无纺布 / 高速 / 全自动等多类型设备,精选优质企业助力精准选购
  • 2021年度十大前沿科技研究盘点
  • 2025 商事律师咨询最新推荐榜:权威甄选专业法律服务品牌武汉公司法商事/武汉股东纠纷股权/武汉商事争议解决/武汉公司法股权律师推荐
  • 2025 最新推荐:全国开锁公司口碑排行榜权威甄选,含智能锁专项服务与紧急上门品牌详解全国/汽车保险柜/汽车锁/保险柜/智能/快速上门开锁公司推荐
  • CSP - J 讲义内容与CSP - S 讲义内容对比
  • 云安全挑战与AI时代防护策略
  • python“锈化”库替代,性能更快的库
  • 大语言模型时代计算语言学新进展
  • 用新媒体给产业园招商 - 智慧园区
  • 30年后摘得诺奖,一个叛逆“东亚小孩”的胜利