刘子诺 发表于 2023-3-7 21:09:47

求助

上座数(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)

刘子诺 发表于 2023-3-8 12:04:42

33没人吗

刘子诺 发表于 2023-3-8 13:25:08

dolly_yos2 发表于 2023-3-8 12:45
std::nth_element 加 std::count,预计代码量不到 20 行

能写一下吗

dolly_yos2 发表于 2023-3-8 14:13:23

刘子诺 发表于 2023-3-8 13:25
能写一下吗

之前的想法好像不够简洁,看看这个怎么样#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;
}
页: [1]
查看完整版本: 求助