鱼C论坛

 找回密码
 立即注册
查看: 2117|回复: 3

求助

[复制链接]
发表于 2023-3-7 21:09:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
上座数(order)
题目描述
卡卡西终于如愿以偿的破解难题,获得了“魔境仙踪”的电影券。晚上,卡卡西迫不及待的跟着妈妈早早的去了影院。这个影院真是大,上下 100 层,每一层又有很多的放映厅。忽然,卡卡西发现有一位叔叔正在放映厅门口来回踱步,眉头紧皱着,像是有难题要解决。卡卡西向前询问情况。那位叔叔说:“小朋友,我是这家影院的经理。我们这个影院有很多个放映厅,每个放映厅观众坐满时能容下 100 人,不开放或没有观众时相当于观众数为 0。现在想统计一下,当前时间,影院中所有放映厅的上座数(即观众数的多少),并且计算排名倒数第 N 位的放映厅的上座人数,以及有多少个放映厅并列排名倒数第 N 位。”卡卡西想了想,对叔叔笑了笑,拍拍胸脯说:“叔叔,你别急,我来帮你解决这个问题。”亲爱的同学们,你们能帮助卡卡西,让她尽早解决问题,观看电影吗?

输入格式
共三行,第一行共一个数 N(0<N≤100000),表示影院经理想知道的放映厅上座数排名倒数第 N 位;
第二行共一个数 S(0<S≤100000),表示该影院总的放映厅个数,
第三行共 S 个数,对应 S 个放映厅的上座数,上座数最少为 0,最大为 100,各个放映厅的上座数分别用空格分开,上座数相同视为并列。

输出格式
共一行,共有两个数,分别表示上座数排名倒数第 N 位放映厅的上座数和具有该上座数的放映厅的个数(中间用空格隔开)。

样例
输入
3
8
8 7 4 90 18 86 99 86
输出
8 1

谁帮我看一下这题怎么做?谢谢(C++17)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-3-8 12:04:42 | 显示全部楼层
33没人吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-8 13:25:08 | 显示全部楼层
dolly_yos2 发表于 2023-3-8 12:45
std::nth_element 加 std::count,预计代码量不到 20 行

能写一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-8 14:13:23 | 显示全部楼层

之前的想法好像不够简洁,看看这个怎么样
#include <algorithm>
#include <array>
#include <format>
#include <iostream>
int main(){
    size_t N;
    std::cin >> N;
    std::array<size_t, 101> counter;
    using Iter = std::istream_iterator<size_t>;
    for(auto iter = std::next(Iter(std::cin)); iter != Iter(); iter++) counter.at(*iter)++;
    size_t index = -1, value = 0;
    std::ranges::for_each(counter, [&index, &value, &N](size_t v){
        if(N!=0){
            ++index;
            if(v && --N == 0) value = v;
        }
    });
    std::cout << (value ? std::format("{} {}", index, value) : "not exist");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 21:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表