传送门

    • 新月轩就餐
      • 题目描述
      • 输入描述
        • 数据范围
      • 输出描述
      • 样例一
        • 输入
        • 输出
  • 题目分析
  • AC代码

新月轩就餐

  • 新月轩就餐 .

时间限制:1秒
空间限制:128M


题目描述

新月轩是璃月最高档的餐厅,这里有m位顶级厨师的手艺。但是餐厅有个奇怪的规定,顾客需要给出两个数字a和b,代表品尝菜单的第a到第b道佳肴,每道佳肴的价钱相同。你的小伙伴小码哥现在希望品尝到所有名厨的手艺,但是又想最小化付的钱。

​ 请你为小码哥出谋划策,想想怎样给定a和b能满足他的要求。保证数据有解。

​ 如有多组解,输出a最小的那组。


输入描述

第一行两个整数 n,m,分别表示佳肴总数和这些佳肴一共由多少厨师所做

第二行包含n个整数ai,代表每道佳肴对应厨师的编号

数据范围

1<=n<=1e6

1<=ai<=m<=2000


输出描述

一行两个整数 a,b


样例一

输入

15 5
1 5 1 2 5 4 3 4 2 1 2 5 5 2 4

输出

3 7

题目分析

vector<int> a[i]记录大厨i做的所有菜分别为第几道

int originalData[i];记录第i道菜的大厨是谁

int thInA[i];记录第i道菜是这个做菜大厨做的第几道菜

之后,我们可以使用一个“小数先出队”的优先队列,初始时入队每个大厨的第一道菜。

每次出队一道菜(编号记为x),由originalData可以得到这道菜是大厨originalData[x]做的,由thInA可以得到这道菜是这个大厨的第thInA[x]道菜。

既然这个菜出队了,那么想要品尝所有大厨的菜,就必须把这个大厨的下一道菜入队。

这样,队列中始终有 m m m道菜,分别来自 m m m个大厨。

每次操作,队列中的最大值(入队时可以记录下来)和队列中的最小值(队首元素)之差就是当前方案的a b跨度

如果当前方案优于历史最佳方案,就更新答案。

直到某个大厨没有下一道菜了,退出循环。

AC代码

/** @Author: LetMeFly* @Date: 2022-08-03 21:48:32* @LastEditors: LetMeFly* @LastEditTime: 2022-08-03 22:44:41*/
#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;vector<int> a[2001];
int originalData[1000010];
int thInA[1000010];
// int loc[2001];
priority_queue<int, vector<int>, greater<int>> pq;int main() {int n, m;cin >> n >> m;for (int i = 1; i <= n; i++) {cd(originalData[i]);thInA[i] = a[originalData[i]].size();a[originalData[i]].push_back(i);}int ans = INT_MAX;int ansA, ansB;int maxValInQueue = 0;for (int i = 1; i <= m; i++) {pq.push(a[i][0]);maxValInQueue = max(maxValInQueue, a[i][0]);}while (true) {int minValInQueue = pq.top();pq.pop();if (maxValInQueue - minValInQueue < ans) {ans = maxValInQueue - minValInQueue;ansA = minValInQueue, ansB = maxValInQueue;}int removedWhose = originalData[minValInQueue];int thOfHim = thInA[minValInQueue];thOfHim++;if (thOfHim == a[removedWhose].size()) {break;}int newVal = a[removedWhose][thOfHim];maxValInQueue = max(maxValInQueue, newVal);pq.push(newVal);}cout << ansA << " " << ansB << endl;return 0;
}

虽然代码可以复制,但最好还是自己理解后再敲哦

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126154056

码蹄集 - MT3029 - 新月轩就餐相关推荐

  1. 算法竞赛入门【码蹄集进阶塔335题】(MT2001-2025)

    算法竞赛入门[码蹄集进阶塔335题](MT2001-2025) 文章目录 算法竞赛入门[码蹄集进阶塔335题](MT2001-2025) 前言 为什么突然想学算法了? 为什么选择码蹄集作为刷题软件? ...

  2. 算法竞赛入门【码蹄集进阶塔335题】(MT2311-2315)

    算法竞赛入门[码蹄集进阶塔335题]MT2311-2315 文章目录 算法竞赛入门[码蹄集进阶塔335题]MT2311-2315 前言 为什么突然想学算法了? 为什么选择码蹄集作为刷题软件? 目录 1 ...

  3. 算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075)

    算法竞赛入门[码蹄集进阶塔335题](MT2051-2075) 文章目录 算法竞赛入门[码蹄集进阶塔335题](MT2051-2075) 前言 为什么突然想学算法了? 为什么选择码蹄集作为刷题软件? ...

  4. 算法竞赛入门【码蹄集进阶塔335题】(MT2291-2295)

    算法竞赛入门[码蹄集进阶塔335题](MT2291-2295) 文章目录 算法竞赛入门[码蹄集进阶塔335题](MT2291-2295) 前言 为什么突然想学算法了? 为什么选择码蹄集作为刷题软件? ...

  5. 算法竞赛入门【码蹄集进阶塔335题】(MT2321-2325)

    算法竞赛入门[码蹄集进阶塔335题](MT2321-2325) 文章目录 算法竞赛入门[码蹄集进阶塔335题](MT2321-2325) 前言 为什么突然想学算法了? 为什么选择码蹄集作为刷题软件? ...

  6. 算法竞赛入门【码蹄集进阶塔335题】(MT2026-2050)

    算法竞赛入门[码蹄集进阶塔335题](MT2026-2050) 文章目录 算法竞赛入门[码蹄集进阶塔335题](MT2026-2050) 前言 为什么突然想学算法了? 为什么选择码蹄集作为刷题软件? ...

  7. 算法竞赛入门【码蹄集新手村600题】(MT1151-1200)

    算法竞赛入门[码蹄集新手村600题](MT1151-1200) 文章目录 算法竞赛入门[码蹄集新手村600题](MT1151-1200) 前言 为什么突然想学算法了? 为什么选择码蹄集*作为刷题软件? ...

  8. 算法竞赛入门【码蹄集进阶塔335题】(MT2330-2335)

    算法竞赛入门[码蹄集进阶塔335题](MT3330-3335) 文章目录 算法竞赛入门[码蹄集进阶塔335题](MT3330-3335) 前言 为什么突然想学算法了? 为什么选择码蹄集作为刷题软件? ...

  9. C++ 查重(码蹄集 新手村)

    题目:定义一个长度为n的整型数组,输入n个元素的值,然后删除重复的数,输出删除后的数组 代码: #include <iostream> #include <algorithm> ...

最新文章

  1. 选择PHP,选择自由与开源
  2. mysql命令创建模式_mysql在命令行模式下创建数据库时要显式指定字符集
  3. 一周飞越50万平方米,无人机检测1.5吨海滩垃圾!自动分类47种,准确率超95%
  4. Windows 11 预览版泄露!有 macOS 那味儿了......
  5. Elasticsearch-PHP学习
  6. mysql多实例配置使用方法
  7. 自锁时间电路plc_PLC对两台三相交流电动机联锁启停控制
  8. PrintNightmare 漏洞的补丁管用吗?安全界和微软有不同看法
  9. 哈工大讯飞联合实验室发布法律领域ELECTRA预训练模型
  10. nvidia显卡cuda的性能_苦等10年!512 CUDA满血GTX 480终于出现:性能提升6%、功耗暴增43%...
  11. java IDEA 打包发布
  12. JS、H5调用手机相册摄像头以及文件夹
  13. python断言语句的语法_Python断言教程
  14. 祝贺光环2014年6月28日PMP考试通过率90.28%
  15. Windows10系统以太网显示“未识别的网络”如何解决
  16. 【论文推荐】了解《目标跟踪》必看的6篇论文(附打包下载地址)
  17. 大工邮箱收件服务器,Outlook 2010 设置邮箱详细步骤
  18. 西门子S7-1200 HslcommunicationDemo大纲拆解
  19. 微信小程序评论/留言功能,附:前端+后端代码+视频讲解!
  20. ubuntu+cuda+theano

热门文章

  1. windows10 win10 假死 死机 鼠标键盘动不了解决
  2. 常见实用网站集合(行业研究/政策研究/学习/办公/设计/编程)
  3. 入职两年,我和业务撕了108次逼
  4. s3cmd 快速评估RADOSGW的性能
  5. lombok小辣椒的使用
  6. 短链接的生成之工具类的编写--三种方式(亲测可用)
  7. 实用功能#用Python给你的微信升升级吧
  8. 生物信息学算法之Python实现|Rosalind刷题笔记:003 中心法则:翻译
  9. 『摄影知识』自然光的应用
  10. chromel浏览器老是提示adobe flash player已过期