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

模拟赛 c7-B rgb

题目描述

\(2N\) 张展牌,每张展牌包含:

  • 整数编号 \((a_i)\)
  • 类别 \((c_i \in {R,G,B})\)

要求将所有展牌两两配对,每张恰好属于一对,总代价规则:

  1. 一对类别相同:代价为 0。
  2. 一对类别不同:代价为两编号绝对值差 \((|x-y|)\)

总代价 = 所有配对代价之和,求最小总代价。

输入格式

  1. 第一行整数\(N\),共 \(2N\) 张展牌
  2. 接下来 \(2N\) 行,每行整数 \((a_i)\) + 字符 \((c_i)\)

输出格式

输出一个整数,最小总代价。

样例输入 1

2
10 R
20 R
13 G
22 B

样例输出 1

5

样例解释

最优方案:两张 \(R\) 配对(0 代价),\(G\)\(B\) 配对 (|13-22|=9),总和 9。

样例输入 2

3
1 R
100 R
2 G
101 G
50 B
60 B

样例输出 2

0

样例解释

对于样例1:

共4张展牌,需要配成2对。所有可能的主要配对⽅式如下:

  • 把两张 \(R\) 类展牌配在⼀起,代价为0;再把 \(G\) 类展牌和 \(B\) 类展牌配在⼀起,代价为\(|13-22|=9\),总代价为9。

  • 把编号为10的 \(R\) 类展牌和编号为13的 \(G\) 类展牌配在⼀起,代价为3;把编号为20的 \(R\) 类展牌和编22为 的 \(B\) 类展 牌配在⼀起,代价为2,总代价为5。

  • 把编号为10的 \(R\) 类展牌和编号为22的 \(B\) 类展牌配在⼀起,代价为12;把编号为20的 \(R\) 类展牌和编号为13的 \(G\) 类 展牌配在⼀起,代价为7,总代价为19。

    因此最⼩总代价为5。

    对于样例2:

    \(R 、 G 、 B\) 三种类别的展牌数量都为偶数。蜗蜗可以把相同类别的展牌互相配对,所有配对的代价都是0,所以最⼩总代价为0。

数据范围

对于40%的数据,保证\(N≤80\)

对于100%的数据,保证\(1≤N≤10^5,1≤a_i≤10^{15},c_i为R、G、B\)中的一个字符。

算法分析

因为展牌的数量为偶数,所以有两种可能:

  1. 三种展牌数量均为偶数,是最优的,代价为0。
  2. 有两种展牌的数量为奇数,剩下的为偶数

如果是第一种,则直接输出0,很简单。但如果是第二种情况,那么只需要考虑两种算法:

  1. 把两种为奇数的展牌各拿一个,拼凑在一起,可以用二分或双指针解决。
  2. 把为偶数的展牌拿两个,各和另外两种凑在一起,也可以用二分或双指针实现,不需要考虑重叠的状况,因为不影响答案。

现在我们就可以开始写代码了,用我上面的思路模拟即可。

我都是用二分写的,因为有内置函数lower_bound,功能是求出再给定的区间内第一个不小于key值的元素的地址。

AC代码

#include<bits/stdc++.h>
#define ll long long//不开long long见祖宗
using namespace std;
int n;
int cnt[5];
ll mn = 1e18;
ll a[5][200005];
void f(int x,int y){for(int i = 1; i<=cnt[x]; i++){int pos = lower_bound(a[y]+1,a[y]+1+cnt[y],a[x][i])-a[y];//找最接近的值//前两个是特判if(pos==1){mn = min(abs(a[y][pos]-a[x][i]),mn);}else if(pos==1+cnt[y]){mn = min(abs(a[y][pos-1]-a[x][i]),mn);}else{mn = min(min(abs(a[y][pos]-a[x][i]),abs(a[y][pos-1]-a[x][i])),mn);}}int z = 6-x-y;//算另一个偶数展牌的下标if(cnt[z]!=0){//存在另一个偶数的展牌ll mn1 = 1e18;for(int i = 1; i<=cnt[x]; i++){int pos = lower_bound(a[z]+1,a[z]+1+cnt[z],a[x][i])-a[z];//找最接近的值//前两个是特判if(pos==1){mn1 = min(abs(a[z][pos]-a[x][i]),mn1);}else if(pos==1+cnt[z]){mn1 = min(abs(a[z][pos-1]-a[x][i]),mn1);}else{mn1 = min(min(abs(a[z][pos]-a[x][i]),abs(a[z][pos-1]-a[x][i])),mn1);}}ll mn2 = 1e18;for(int i = 1; i<=cnt[y]; i++){int pos = lower_bound(a[z]+1,a[z]+1+cnt[z],a[y][i])-a[z];//和上面一样//也和上面一样if(pos==1){mn2 = min(abs(a[z][pos]-a[y][i]),mn2);}else if(pos==1+cnt[z]){mn2 = min(abs(a[z][pos-1]-a[y][i]),mn2);}else{mn2 = min(min(abs(a[z][pos]-a[y][i]),abs(a[z][pos-1]-a[y][i])),mn2);}}mn = min(mn1+mn2,mn);//取最小值}
}
int main(){cin>>n;n*=2;//千万不要忘记*2!!!for(int i = 1; i<=n; i++){ll x;char y;cin>>x>>y;//处理输入if(y=='R'){a[1][++cnt[1]] = x;}else if(y=='G'){a[2][++cnt[2]] = x;}else{a[3][++cnt[3]] = x;}}for(int i = 1; i<=3; i++){sort(a[i]+1,a[i]+1+cnt[i]);//排序}int x,y;if(cnt[1]%2==0 && cnt[2]%2==0 && cnt[3]%2==0){//最好的情况cout<<0;//直接输出return 0;}//找是哪两个奇数,求出下标if(cnt[1]%2==0 && cnt[2]%2==1 && cnt[3]%2==1){x = 2;y = 3;}else if(cnt[1]%2==1 && cnt[2]%2==0 && cnt[3]%2==1){x = 1;y = 3;}else{x = 1;y = 2;}f(x,y);//执行函数cout<<mn;//输出最小值return 0;
}

总结

这道题思路不是很好想,也不是很好证明,但只要思路想清了,代码就很好写了,直接二分加模拟即可,个人觉得可以评到黄。

http://www.jsqmd.com/news/1407788/

相关文章:

  • 2026精选河北可靠的电力塔直销厂家哪个好?泰基诚科技值得关注 - 装修教育财税推荐2026
  • 2026年采购硬质合金旋转锉 可关注丰华硬质合金刃具厂 - 起跑123
  • 2026深圳工厂仓库设备迁移正规公司汇总:持道路运输许可证、配备起重机械的靠谱服务商 - 禧燕搬家
  • 2026 年现阶段,宜阳本地电焊机回收公司推荐,那些堆在车间角落的旧设备,最后都被它悄悄拉走换了实在的好处-通茂回收 - 行业推荐官【认证】
  • 2026 年新发布:天长热门的抖音代运营公司企业电话,花冤枉钱的抖音涨粉坑,原来有这样的解决门道?-抖企盈获客服务 - 行业推荐官-2
  • 2026 年当下,路南评价高的车床外防护厂家联系方式,车间里藏着的安全屏障,竟能帮工厂省下大笔运维成本你敢信?-鑫姆迪克机床防护罩 - 行业推荐官[官方】--
  • TLS通信加密 对称加密 公钥加密
  • 2026 年新消息:安吉本地混凝土绳锯切割公司怎么联系,拆楼断梁不用砸,这玩意儿为何成了工程人抢着用的香饽饽? - 行业严选官
  • 2026精选:Geo推广实力公司怎么选?云南智客云AI推广凭什么值得推荐 - 装修教育财税推荐2026
  • 2026年注意事项重庆市配镜终身售后时效科普:最新要点与实用解读、当前变化和行业参考、核心知识与常见疑问,关键事项一文讲清 - 小校长
  • 2026年德兴市优质家具厂推荐 永恒家居实力靠谱值得选 - 起跑123
  • 2026 年更新:高唐正规的非标钢管厂生产商有哪些,别再乱找管材了,这家藏在深巷里的厂,连定制到极致的钢管都能做。 - 行业推荐官[官方】--
  • 2026绍兴代理记账亲测,3家靠谱经验复盘 - 花开富贵112
  • 2026 年青浦诚信的S20-M油浸式变压器(二级能效)供货商哪个好,你家工厂还在用高耗能变压器?这货帮你年省电费超15%-华屹变压器 - 行业鉴选官
  • 2026年第3季度重庆市罗敦司得眼镜店问答解惑:用户关心的问题与判断方法、高频疑问和注意事项 - 小校长
  • 锅炉引风机怎么选?高性价比厂商筛选的四个关键点 - 装修教育财税推荐2026
  • 2026年第3季度重庆市儿童第一次近视配镜推荐店选择参考:怎么选更适合实际需求、适用人群与选择标准 - 小校长
  • 南京工贸厂区无人值守巡检机器人销售厂家哪家靠谱?从选型到落地全解析 - 装修教育财税推荐2026
  • 一文读懂 2026 手机国家补贴政策:梳理补贴标准、申领条件、平台渠道,学生认证、帮你理清可享受哪些叠加福利 - 天下观知
  • 2026 年苏仙专业的注浆加固技术公司推荐,老房裂了不用凿墙,这玩意儿悄悄托住安全底盘,连工队都夸妙-中峻注浆加固 - 行业严选官
  • 2026年浙江找专业玻璃钢厂家,不妨看看这家本土企业 - 起跑123
  • 零基础报名无人机维修培训,多久能够独立上手接单创收 - 湖南阳光技术
  • Windows 11管理员账户重命名:注册表修改、登录失败修复与完整操作指南
  • 2026义乌亲测!1688代入驻靠谱案例复盘 - 花开富贵112
  • 2026年优选合肥评价高的美式箱变公司推荐 - 装修教育财税推荐2026
  • 同一件专利在美国授权了,在欧洲却被驳回,问题出在权利要求书的写法上
  • 2026 年新发布:榕城可靠的金属雕花外墙挂板厂家怎么联系,住老破小也能秒变轻奢洋房?这玩意儿比石材质感还高级还省心 - 行业严选官
  • 2026 年至今,长寿靠谱的生活水箱厂实力厂家哪家靠谱,小区家家户户用的蓄水容器,居然是这儿造的?看完刷新认知 - 企业推荐管【认证】
  • Windows DNS缓存刷新全攻略:原理、方法与故障排查
  • 2026 年现阶段,盈江口碑好的人行防护栏厂家找哪家,人行道上这排铁家伙,居然还藏着你不知道的保命门道?-煜翎丝网 - 行业推荐官[官方】--