一级域名网站如何申请,wordpress+火车头接口,营销型网站概念,网站一定备案吗题目链接#xff1a;
1.三国游戏 - 蓝桥云课 (lanqiao.cn)
蓝桥杯2023年第十四届省赛真题-三国游戏 - C语言网 (dotcpp.com)
虽然这道题不难#xff0c;很容易想到#xff0c;但是这个视频的思路理得很清楚#xff1a;
[蓝桥杯]真题讲解#xff1a;三国游戏#xff0…题目链接
1.三国游戏 - 蓝桥云课 (lanqiao.cn)
蓝桥杯2023年第十四届省赛真题-三国游戏 - C语言网 (dotcpp.com)
虽然这道题不难很容易想到但是这个视频的思路理得很清楚
[蓝桥杯]真题讲解三国游戏贪心_哔哩哔哩_bilibili 说明
贪心的思路借用视频的几张图说明 sumA[i]可以拆解成A[1]A[2]A[3].....A[n] B/C同理就容易想到构造右边的D数组。 我当时考虑的思路是对于一个国家来说肯定是优先选它增加最大的事件所以需要进行一个排序但是直接排序的话无法跟其他国家 事件增益对应于是考虑怎么把三个国家的增益绑定在一起才能排序于是就构造了D这个式子。 这个题需要注意的地方
1.题目 提到 如果不存在任何能让某国获胜的情况请输出 −1 。要特判不存在某国胜利的情况 输出-1不要遗漏了。
2.sort函数的用法sort(首元素的地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填));
第二个参数是尾元素地址的下一个地址刚开始直接用的n-1最后一个元素就没被排序导致AC 不了。
//错误代码
sort(a,an-1,greaterint());
3.计算这个d数组的时候我就是用原数组来存的注意要等三个d数组的结果算出来再存入原数组因为你先存了后面算的D数组就不是你要的差值了。这些细节需要注意不要粗心。
//等三个D计算完 再存入原数组
for(int i0;in;i){int aaa[i]-b[i]-c[i];int bbb[i]-c[i]-a[i];int ccc[i]-a[i]-b[i];a[i]aa;b[i]bb;c[i]cc;}
代码
因为只有三个分支就没有再封装成函数了。
#includebits/stdc.h
#define int long long
#define endl \n
using namespace std;
const int N1e510;
int ans0;
int a[N],b[N],c[N];
int mx0;
signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cinn;for(int i0;in;i){cina[i];}for(int i0;in;i){cinb[i];}for(int i0;in;i){cinc[i];}for(int i0;in;i){int aaa[i]-b[i]-c[i];int bbb[i]-c[i]-a[i];int ccc[i]-a[i]-b[i];a[i]aa;b[i]bb;c[i]cc;}//sort(首元素的地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填));sort(a,an,greaterint());ans0;int sum0;for(int i0;in;i){if(suma[i]0){suma[i];ans;}else break;}mxmax(mx,ans);sort(b,bn,greaterint());ans0;sum0;for(int i0;in;i){if(sumb[i]0){sumb[i];ans;}else break;}mxmax(mx,ans);sort(c,cn,greaterint());ans0;sum0;for(int i0;in;i){if(sumc[i]0){sumc[i];ans;}else break;}mxmax(mx,ans);//不要忘了特判不存在某国胜利的情况 if(mx0) mx-1; coutmxendl;return 0;
}