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

速通ACM省铜第十五天 赋源码(Creating a Schedule)

目录

引言:

Creating a Schedule:

        题意分析

        逻辑梳理

        代码实现

结语:


引言:

        不知不觉速通ACM系列已经更新半个月了,回首这半个月刷的题,心里真是五味杂陈,但看着这么多绿的1300-1500的题,又有了满满的成就感,从一开始打1400的题非常艰难,基本要花一下午或者一天时间才能想出来的题,而现在却能在半个小时左右就可以开出来了,真是令人感慨,那么,先来看一下这十五天刷的题,如图

        相信坚持看我速通ACM专栏的友友们现在能力也有了很大的提升(很大可能是思维上的提升),那么接下来,我们就接着进行今天的ACM速通吧

        今天我们要讲的题是上图中最下面的一个AC题,这是一道CF评级为1400的题, 那么接下来,就进入今天的题目讲解啦————————>

                ​​​​​​​        ​​​​​​​        

Creating a Schedule:

        那么,按照惯例,我们先来看题目

        题意分析

        题目链接在这里Problem - 2111D - Codeforces

        不想跳转的可看下图(沉浸式翻译插件出问题了,换了一个翻译插件)

        题目意思其实很简单, 就是给你n个组和m个教室

        然后一天要上6节课,一个教室只能容纳一个小组,不可以多个小组在一间教室上课

        然后校长想要让所有组上完课后爬的楼梯数加起来要最多

        让你输出爬楼梯最多时每个小组的上课教室分配方式

        题目就这么简单,那么我们进入逻辑梳理环节


        逻辑梳理

        这个的逻辑其实也很好梳理,比起一堆教室乱跳,明显俩个教室之间往返上课是最可行的,那么什么时候是上下楼层最多的呢,那就是最低层到最高层教室,这就是上下楼层最多的

        那么第一组确定完了,第二组此时不能往里压,因为1个组是在俩个教室来回跳上课,所以当第一组在其中一间教室上课时候,另一间教室肯定是空的

        这个时候第二个教室就可以去那间教室去上课,那么等下课时候,第一组和第二组的教室刚好对调,所以俩个教室可以供2个组上课

        那么第三个组怎么分配呢,自然就是最低的教室往上找一间,最高的教室往下找一间,这便是第三组和第四组的教室了,那么有人就会问了,为什么这样会让他们爬楼梯的次数最多呢

        那么我们就来假设,最高层是h1,次高层是h2,最底层是l1,次底层是l2,若按上面的方案来看,最多的爬楼梯是(h1-l1)*2+(h2-l2)*2,有的人可能会想那最高和次高,次高和最低这样会不会使爬楼梯增多,事实是不会的,这种情况他们的爬楼梯数量是(h1-l2)*2+(h1-l1)*2,这很明显,和上面的式子是一样的,所以明显可以用上面的那个方式来找方案就可以啦

        那么这个时候就要特别注意了,那就是小组数量是不确定的,而按上面的方案来输出,为了优化时间复杂度,只有6个元素的情况下肯定是直接输出的,那么一次会输出俩个小组,奇数情况下就会出问题,所以只要特判一下就可以啦

        那么,逻辑梳理完啦,接下来我们来看具体的代码实现


        代码实现

        需要注意的在逻辑梳理里面都已经讲清楚啦,那么,就直接上AC码啦

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <queue>
#include <vector>
using namespace std;int t;
long long a[100010];void solve()
{int n, m;cin >> n >> m;for (int i = 1; i <= m; i++){cin >> a[i];}sort(a + 1, a + m + 1);for (int i = 1; i <= n / 2; i++){cout << a[i] << " " << a[m - i + 1] << " " << a[i] << " " << a[m - i + 1] << " " << a[i] << " " << a[m - i + 1] << endl;cout << a[m - i + 1] << " " << a[i] << " " << a[m - i + 1] << " " << a[i] << " " << a[m - i + 1] << " " << a[i] << endl;}if (n % 2){int i = n / 2 + 1;cout << a[i] << " " << a[m - i + 1] << " " << a[i] << " " << a[m - i + 1] << " " << a[i] << " " << a[m - i + 1] << endl;}
}int main()
{cin >> t;while (t--){solve();}return 0;
}

        那么,这题就讲解完啦

结语:

         今日算法讲解到此结束啦,希望对你们有所帮助,谢谢观看,如果觉得不错可以分享给朋友哟。当然也可以关注一下,有什么看不懂的可以评论问哦

http://www.dtcms.com/a/406696.html

相关文章:

  • 软考 系统架构设计师系列知识点之杂项集萃(155)
  • ubuntu如何查看一个内核模块被什么模块依赖(内核模块信息常用命令)?
  • 做项目网站阿里云预安装wordpress
  • 提供网站推广公司电话wordpress分享微信插件下载地址
  • 用C#做CATIA二次开发(1)
  • 以事件响应为驱动的 iOS 混淆策略,把混淆做成可测、可回溯、可改进的安全能力(iOS 混淆、IPA 加固、事件响应)
  • 廊坊免费网站建设模板带着做计算机项目的网站
  • 帆软普通报表根据条件限制展示不同报表
  • 《2025年AI产业发展十大趋势报告》六十九
  • HTTP 请求方式当中GET请求需要请求头吗?
  • 如何做一个属于自己的网站秦皇岛黄金海岸
  • 【Android View】窗口机制
  • 基于Spring Boot的竞赛管理系统架构设计
  • php代码删除网站温州市建设工程管理网站
  • 【开题答辩全过程】以 Bug交流网站为例,包含答辩的问题和答案
  • Agent开发02-关键思想(ReAct、ReWOO、Reflexion、LLM Compiler等)
  • 【Python语法基础学习笔记】输入输出进阶
  • 整站排名服务手机p2p网站开发
  • Flex布局完全指南:从容器到项目的全方位解析
  • 网站开发搜索功能怎么实现装潢公司设计效果图
  • 营销网站建设都是专业技术人员广西玉林网站建设
  • AI论文写作工作流:从输入到输出的五步模型
  • 《从0到1搭建客户画像系统:AI工具矩阵如何解决开发困局》
  • 阿里云云效将本地的maven相关文件批量推送到阿里云仓库以及使用
  • Docker Swarm主机编排
  • [论文阅读] 人工智能+ | 突破LLM情报分析瓶颈!MAKR多Agent框架让长文本因果推理更精准
  • apifox对一批文件批量请求一个接口
  • 情绪识别论文阅读——Eyemotion
  • 帝国建站软件全栈网站开发工程师
  • 嵌入式单线程编程模型的整理