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

[JOIGST 2024]-卡牌游戏 解题报告

原题链接

切入

由于\(n\le5\times10^5\),直接一眼贪心
首先要找出所有牌中的最大值\(maxn1\)以及其对应的颜色\(col1\),用来匹配与\(col1\)不同颜色的牌,只要有\(a_i+maxn1>0\),就可以添加至\(ans\)的贡献中
而对于与\(col1\)同色的卡牌来说,则需要找出一个与\(col1\)不同色的卡牌中的最大值,与同色的卡牌相匹配
代码实现方面,我们可以用结构体存储点数和颜色,然后对它快排,找出最大值与不同色的次大值,之后一一匹配即可
记得要给次大值的\(maxn2\)设定一个极小值,以特判当所有颜色都为同一种颜色的情况
时间复杂度为\(O(nlogn)\)

优化

注意到我们的算法复杂度的瓶颈在于快排,但我们其实并不需要对所有的数据进行排序,只需要找到最大值和不同色的次大值就可以了,只需两个\(for\)循环即可实现(其实一个就够了)
要记得统计最大值所对应的\(idx\),以防重复贡献
优化后的时间复杂度为\(O(n)\)
其余细节详见代码

AC Code
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define endll " "
#define fre(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
#define pii pair<int,int>
#define lowbit(x) x&-x
#define pb push_back
#define eb emplace_back
#define it inline int 
#define iv inline void
#define ib inline bool
using namespace std;
const int MAXN=500050;
const int INF=0x3f3f3f3f;
const int MOD=998244353;
it gcd(int x,int y) {return y==0?x:gcd(y,x%y);}
it lcm(int x,int y) {return x/gcd(x,y)*y;}
it max(int x,int y) {return x>y?x:y;}
it min(int x,int y) {return x<y?x:y;}
it ksm(int x,int m,int mod)
{int res=1,bas=x%mod;while(m){if(m&1)res=(res*bas)%mod;bas=(bas*bas)%mod;m >>= 1;}return res%mod;
}
int n,m,l,r,u,v,w,cnt,tot,ans,head[MAXN],maxn1,maxn2=-INF,col1,col2,idx;
mt19937_64 rnd(chrono::system_clock::now().time_since_epoch().count());
struct lane
{int val,col;
}t[MAXN];
signed main()
{//fre("");ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n;for(int i=1;i<=n;i++)cin >> t[i].val >> t[i].col;for(int i=1;i<=n;i++){maxn1=max(maxn1,t[i].val);if(maxn1==t[i].val){col1=t[i].col;idx=i;}}for(int i=1;i<=n;i++){if(t[i].col!=col1){maxn2=max(maxn2,t[i].val);if(maxn2==t[i].val)col2=t[i].col;}}if(maxn2==-INF){cout<<ans;return 0;}for(int i=1;i<=n;i++){if(t[i].col!=col1 && t[i].val+maxn1>0)  //与最大值匹配ans+=t[i].val+maxn1;if(t[i].col==col1 && t[i].val+maxn2>0 && idx!=i)  //次大值不同色与最大值的颜色相同的匹配,不计算遇到最大值时的贡献,避免重复贡献ans+=t[i].val+maxn2;}cout<<ans;return 0;
}
http://www.zskr.cn/news/53299.html

相关文章:

  • 无菌药厂变频升级方案:ModbusTCP转Canopen高效适配方案
  • 31、用户授权 GRANT
  • 理解模型输出配置
  • MapStruct对象属性拷贝
  • 2025 最新薄膜蒸发设备厂家推荐!权威测评认证薄膜蒸发设备品牌排行榜,聚焦工艺创新与品质保障刮板薄膜蒸发设备/高效薄膜蒸发设备/实验室薄膜蒸发设备公司推荐
  • java根据word模板生成word,在根据word文件转换成pdf文件
  • 2025 最新打印机经销商推荐排行榜:长三角标杆企业 + 国内新锐品牌,全包服务与高效响应双重保障彩色打印机/打印机销售/打印机出租/打印机租赁公司推荐
  • 函数速查表
  • 2025年安徽合肥异味治理服务口碑推荐排行榜
  • 正规的甲醛检测平台推荐几家
  • sub-1G收发芯片DP4330A低成本解决方案OOK /(G)FSK 等多种调制方式远距离 - 动能世纪
  • 2025年羊毛地毯品牌哪家好?权威排行Top10推荐
  • 模型训练场景5090和4090的算力比较
  • 2025年羊毛地毯品牌口碑推荐榜单
  • 活动预告|IvorySQL 诚邀您参加2025开放原子开发者大会
  • 2025年评价高的羊毛地毯制造企业排行
  • 2025年隔离器厂家实力榜:细胞治疗隔离器、无菌粉体原料药隔离器、负压隔离器、多类型隔离器五家企业凭技术与口碑出圈
  • 2025年国内产品认证机构权威评测:昆明英格尔管理咨询有限公司蝉联榜首
  • [题解]P2340 [USACO03FALL] Cow Exhibition G
  • 基于模型预测控制的主蒸汽温度单步预测MATLAB实现
  • 2025年自动化绕线机订制厂家权威推荐:电机自动绕线机/小型自动绕线机/全自动电机绕线机源头厂家精选
  • Springboo下的MQTT多broker实现
  • 2025 年 11 月流速仪厂家推荐排行榜,LS300-A 流速仪,旋杯式/旋桨式流速仪,手持式电波雷达流速仪,专业测量与高效性能口碑之选
  • CF1830D Mex Tree
  • 如何在Totally Stub区域达成负载均衡
  • linux apache域名绑定域名
  • swagger 自动化文档
  • 2025年PPH真空机组定制厂家权威推荐:PPH环保型水喷射真空机组/PP水喷射真空机组/聚丙烯水喷射真空机组源头厂家精选
  • 基于DSP28027的流水灯实验
  • pycharm中如何切换多个python解释器使用:调整环节变量 - yj