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

蓝桥杯23年第十四届省赛真题-三国游戏|贪心,sort函数排序

题目链接:

1.三国游戏 - 蓝桥云课 (lanqiao.cn)

蓝桥杯2023年第十四届省赛真题-三国游戏 - C语言网 (dotcpp.com)

虽然这道题不难,很容易想到,但是这个视频的思路理得很清楚:

[蓝桥杯]真题讲解:三国游戏(贪心)_哔哩哔哩_bilibili

 说明:

贪心的思路,借用视频的几张图说明:

sum(A[i])可以拆解成A[1]+A[2]+A[3]+.....+A[n] ,B/C同理,就容易想到构造右边的D数组。

我当时考虑的思路是对于一个国家来说,肯定是优先选它增加最大的事件,所以需要进行一个排序,但是直接排序的话,无法跟其他国家 事件增益对应,于是考虑怎么把三个国家的增益绑定在一起,才能排序,于是就构造了D这个式子。

 这个题需要注意的地方:

1.题目 提到 :如果不存在任何能让某国获胜的情况,请输出 −1 。要特判不存在某国胜利的情况 ,输出-1,不要遗漏了。

2.sort函数的用法:sort(首元素的地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填));

第二个参数是尾元素地址的下一个地址,刚开始直接用的+n-1,最后一个元素就没被排序,导致AC 不了。

//错误代码
sort(a,a+n-1,greater<int>());

3.计算这个d数组的时候,我就是用原数组来存的,注意:要等三个d数组的结果算出来再存入原数组,因为你先存了后面算的D数组就不是你要的差值了。这些细节需要注意,不要粗心。

//等三个D计算完 再存入原数组 
for(int i=0;i<n;i++){int aa=a[i]-b[i]-c[i];int bb=b[i]-c[i]-a[i];int cc=c[i]-a[i]-b[i];a[i]=aa;b[i]=bb;c[i]=cc;}

代码:

因为只有三个分支,就没有再封装成函数了。

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N=1e5+10;
int ans=0;
int a[N],b[N],c[N];
int mx=0;
signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin>>n;for(int i=0;i<n;i++){cin>>a[i];}for(int i=0;i<n;i++){cin>>b[i];}for(int i=0;i<n;i++){cin>>c[i];}for(int i=0;i<n;i++){int aa=a[i]-b[i]-c[i];int bb=b[i]-c[i]-a[i];int cc=c[i]-a[i]-b[i];a[i]=aa;b[i]=bb;c[i]=cc;}//sort(首元素的地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填));sort(a,a+n,greater<int>());ans=0;int sum=0;for(int i=0;i<n;i++){if(sum+a[i]>0){sum+=a[i];ans++;}else break;}mx=max(mx,ans);sort(b,b+n,greater<int>());ans=0;sum=0;for(int i=0;i<n;i++){if(sum+b[i]>0){sum+=b[i];ans++;}else break;}mx=max(mx,ans);sort(c,c+n,greater<int>());ans=0;sum=0;for(int i=0;i<n;i++){if(sum+c[i]>0){sum+=c[i];ans++;}else break;}mx=max(mx,ans);//不要忘了特判,不存在某国胜利的情况 if(mx==0) mx=-1;	cout<<mx<<endl;return 0;
}

http://www.lryc.cn/news/328437.html

相关文章:

  • P15:PATH环境变量
  • math模块篇(七)
  • wordpress插件,免费的wordpress插件
  • Remote Desktop Manager for Mac:远程桌面管理软件
  • 如何撰写研究论文
  • 数据结构
  • 动态规划相关题目
  • iOS - Runtime - Class-方法缓存(cache_t)
  • 2014年认证杯SPSSPRO杯数学建模B题(第一阶段)位图的处理算法全过程文档及程序
  • 【物联网项目】基于ESP8266的家庭灯光与火情智能监测系统——文末完整工程资料源码
  • Unity中控制帧率的思考
  • 阿里云子域名配置,且不带端口访问
  • C#-ConcurrentDictionary用于多线程并发字典
  • 深入探讨多线程编程:从0-1为您解释多线程(下)
  • 深度学习pytorch——减少过拟合的几种方法(持续更新)
  • 排序第五篇 归并排序
  • 【Win】使用PowerShell和Webhooks轻松发送消息至Microsoft Teams
  • ESCTF-OSINT赛题WP
  • 2024蓝桥杯省赛保奖突击班-Day2-前缀和、差分、尺取_笔记_练习题解
  • C++基础之虚函数(十七)
  • 快速入门Kotlin①基本语法
  • 【理解指针(四)】
  • Ribbon简介
  • 【感悟《剑指offer》典型编程题的极练之路】02字符串篇!
  • 通过 Docker 实现国产数据库 OpenGauss 开发环境搭建
  • 【Java】LinkedList模拟实现
  • ubuntu下mysql常用命令
  • 燃气官网安全运行监测系统-阀井燃气监测仪-旭华智能
  • vue 文件预览(docx、.xlsx、pdf)
  • 云架构(二) 大使模式