news 2026/4/26 17:14:07

GESP认证C++编程真题解析 | P10377 [GESP202403 六级] 好斗的牛

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP认证C++编程真题解析 | P10377 [GESP202403 六级] 好斗的牛

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


【题目来源】

洛谷:[P10377 GESP202403 六级] 好斗的牛 - 洛谷

【题目描述】

你有1 0 9 10^9109个牛棚,从左到右一字排开。你希望把n nn头牛安置到牛棚里。麻烦的是,你的牛很好斗,如果他们附近有其他的牛,他们就会不安分地去挑事。其中,第i ii头牛的攻击范围是( a i , b i ) (a_i, b_i)(ai,bi),这意味着,如果他的左边a i a_iai个牛棚或者右边b i b_ibi个牛棚有其他牛,它就会去挑事。

你想留下一段连续的牛棚,并把其他牛棚都卖掉。请问您最少需要留下多少牛棚,才能保证至少存在一种方案能够把所有的n nn头牛都安置进剩余的牛棚里,且没有牛会挑事?

【输入】

第一行一个正整数n nn
第二行n nn个正整数a 1 , a 2 , … a n a_1, a_2, \dots a_na1,a2,an
第三行n nn个正整数b 1 , b 2 , … b n b_1, b_2, \dots b_nb1,b2,bn

【输出】

输出一行一个整数表示答案。

【输入样例】

2 1 2 1 2

【输出样例】

4

【算法标签】

《洛谷 P10377 好斗的牛》 #模拟# #搜索# #GESP# #2024#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;intn;// 牛的数量intflag[15];// 标记数组,用于记录牛是否被使用inta[15];// 排列数组,存储当前排列的牛的顺序intminn=1e9;// 最小总距离,初始化为一个大数structNode{inta;// 牛的左边距离intb;// 牛的右边距离}cow[15];// 牛的信息数组// 深度优先搜索生成全排列voiddfs(intstep){// 如果已经排列完所有牛,计算当前排列的总距离if(step>n){inttot=1;// 初始化总距离,第一头牛需要一个牛棚for(inti=2;i<=n;i++)// 从第二头牛开始计算{// 计算相邻两头牛之间的栅栏距离// 取左边牛的右边距离和右边牛的左边距离的最大值tot+=max(cow[a[i]].a,cow[a[i-1]].b);tot+=1;// 当前这头牛也需要一个牛棚}// 更新最小总距离minn=min(minn,tot);return;}// 生成全排列for(inti=1;i<=n;i++)// 尝试将每头牛放在当前位置{if(!flag[i])// 如果这头牛还没有被使用{flag[i]=1;// 标记为已使用a[step]=i;// 将牛i放在第step个位置dfs(step+1);// 递归放置下一头牛flag[i]=0;// 回溯,取消标记}}}intmain(){// 输入牛的数量cin>>n;// 输入每头牛左边的距离for(inti=1;i<=n;i++){cin>>cow[i].a;}// 输入每头牛右边的距离for(inti=1;i<=n;i++){cin>>cow[i].b;}// 从第一个位置开始深度优先搜索dfs(1);// 输出最小总距离cout<<minn<<endl;return0;}

【运行结果】

2 1 2 1 2 4
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 17:11:45

Screenbox:终极Windows媒体播放解决方案,重新定义你的影音世界

Screenbox&#xff1a;终极Windows媒体播放解决方案&#xff0c;重新定义你的影音世界 【免费下载链接】Screenbox LibVLC-based media player for the Universal Windows Platform 项目地址: https://gitcode.com/gh_mirrors/sc/Screenbox 还在为Windows上的媒体播放器…

作者头像 李华
网站建设 2026/4/25 0:52:33

星露谷农场规划完整教程:从新手到布局专家的进阶指南

星露谷农场规划完整教程&#xff1a;从新手到布局专家的进阶指南 【免费下载链接】stardewplanner Stardew Valley farm planner 项目地址: https://gitcode.com/gh_mirrors/st/stardewplanner 你是否曾经在星露谷物语中因为农场布局不合理而浪费大量时间&#xff1f;是…

作者头像 李华
网站建设 2026/4/23 17:53:22

AITrack头部追踪系统:从零搭建沉浸式游戏体验

想要在游戏中体验真实的头部运动追踪吗&#xff1f;AITrack正是你需要的开源神器&#xff01;作为一款基于深度学习的6自由度头部追踪软件&#xff0c;它能够将你的头部动作实时映射到游戏角色中&#xff0c;让每一次转头、低头都带来前所未有的沉浸感。 【免费下载链接】aitra…

作者头像 李华
网站建设 2026/4/25 7:26:38

Klipper树莓派配置终极指南:低成本实现专业级3D打印控制

Klipper树莓派配置终极指南&#xff1a;低成本实现专业级3D打印控制 【免费下载链接】klipper Klipper is a 3d-printer firmware 项目地址: https://gitcode.com/GitHub_Trending/kl/klipper 还在为传统3D打印机控制器动辄数百元的价格而犹豫不决&#xff1f;是否渴望用…

作者头像 李华
网站建设 2026/4/25 10:22:04

谁考了第k名 - 结构体数组排序

题目要求输出第k名&#xff0c;所以我们在输入后需要对学生进行成绩排名。又要求以%g输出。&#xff08;%g是double类型的更简洁输出&#xff0c;能够自动选择最短输出宽度的方式打印浮点数&#xff09;首先定义一个结构体数组&#xff0c;用于存放输入的数据&#xff0c;然后写…

作者头像 李华