求助
上座数(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) 33没人吗 dolly_yos2 发表于 2023-3-8 12:45
std::nth_element 加 std::count,预计代码量不到 20 行
能写一下吗 刘子诺 发表于 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]