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

题解:CF2137D Replace with Occurrences

题意为给定一个长度为 \(n\) 的序列 \(b\),要求你构造一个序列 \(a\) 使得对于每一个序列 \(a\) 中的数 \(a_i\),在序列 \(a\) 都出现了 \(b_i\) 次。
可以发现 \(a\) 序列中的数的大小是无关紧要的,重要的是出现次数。
一开始可以很快的得出一个错解那就是判断完有无解之后直接输出 \(b\) 序列。
但是这个解法的错误在于可能有多个相同出现次数的 \(a_i\),即 \(b_i\)\(b\) 中的出现次数应为其倍数而不是其本身。
所以用一个变量 \(cnt\) 来代表现在用了多少个数来构建 \(a_i\),再对于每\(b_i\)次都让 \(cnt\) 增加一次,此时每个 \(a_i\) 即为 \(cnt\)
代码如下:

#include<bits/stdc++.h>
using namespace std;
int t,n,a[200001],b[200001],cnt,id[200001];
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>t;while(t--){memset(b,0,sizeof b);memset(id,0,sizeof id);cin>>n,cnt=0;for(int i=1;i<=n;i++)cin>>a[i],b[a[i]]++;bool f=1;for(int i=1;i<=n;i++)if(b[a[i]]%a[i]){f=0;break;}if(!f){cout<<"-1\n";continue;}for(int i=1;i<=n;i++){if(b[a[i]]%a[i]==0)id[a[i]]=(++cnt);cout<<id[a[i]]<<' ';b[a[i]]--;}cout<<'\n';}
}
http://www.wxhsa.cn/company.asp?id=3675

相关文章:

  • 题解:CF2137C Maximum Even Sum
  • 第02周 java预习
  • 编码规范
  • 深入解析:【译】Visual Studio 八月更新已发布 —— 更智能的人工智能、更出色的调试功能以及更多控制权
  • 命令模式在 TPL Dataflow 反馈回路管道中的应用及问题解决
  • Ubuntu 24.04 服务器调整MySQL 8.0.42 三节点集群(一主两从架构)安装部署配置教程
  • 使用almalinux基础镜像创建nginx镜像
  • docke容器版Nessus登录+破解+激活+特征库更新
  • 我把Cursor当磁盘清理工具用,非常棒! - ukyo-
  • vue项目
  • 第九篇:数据库服务克隆应用
  • Anti-Proxy Attendance 题解
  • 【2024-2025第二学期】助教工作总结
  • 开始每小时记录日程
  • 5【鸿蒙/OpenHarmony/NDK】使用Node-API进行异步任务开发
  • 控制器指令
  • 题解:AT_abc421_c [ABC421C] Alternated
  • MySQL数据库:SQL数据类型
  • Ubuntu 安装
  • 幼等数论
  • 搭建rocketmq的三主三从遇到的坑
  • 深入解析:轻松Linux-9.进程间通信
  • 2025.9.14——1黄1绿
  • Ubuntu 中改图片大小
  • Day01
  • 认识眼图和眼图的参数
  • 【芯片设计-信号完整性 SI 学习 1.2 -- loopback 回环测试】 - 实践
  • 【科研绘图系列】R语言绘制地图和散点图 - 指南
  • Java NIO 学习小记
  • 扩展欧几里得算法求乘法逆元