思路:

  1. 首先读入n和k,并创建一个大小为n的数组存储序列。
  2. 读入序列中的n个数,并计算所有连续子序列的平均值,并将平均值存储在一个vector中。
  3. 对vector进行排序。
  4. 输出第k小的平均值,保留到小数点后4位。

代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>

using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    
    vector<int> sequence(n);
    for (int i = 0; i < n; i++) {
        cin >> sequence[i];
    }
    
    vector<double> averages;
    for (int i = 0; i < n; i++) {
        double sum = 0;
        for (int j = i; j < n; j++) {
            sum += sequence[j];
            averages.push_back(sum / (j - i + 1));
        }
    }
    
    sort(averages.begin(), averages.end());
    
    cout << fixed << setprecision(4) << averages[k - 1] << endl;
    
    return 0;
}

复杂度分析:

  1. 读入n和k的时间复杂度为O(1)。
  2. 读入序列中的n个数的时间复杂度为O(n)。
  3. 计算所有连续子序列的平均值的时间复杂度为O(n^2)。
  4. 对vector进行排序的时间复杂度为O(n^2logn)。
  5. 输出第k小的平均值的时间复杂度为O(1)。
  6. 总的时间复杂度为O(n^2logn)。
  7. 空间复杂度为O(n^2),用于存储所有平均值。
cpp题目描述有一天小 A 得到了一个长度为 n 的序列。他把这个序列的所有连续子序列都列了出来并对每一个子序列 都求了其平均值然后他把这些平均值写在纸上并对它们进行排序 最后他报出了第 k 小的平均值。你要做的就是模仿他的过程。输入格式第一行两个整数 nk意义如题中所述。第二行 n 个正整数即为小 A 得到的序列。输出格式一行一个实数表示第 k 小的平均值保留到小数点后 4 位。输入输出样例样例

原文地址: http://www.cveoy.top/t/topic/i7yE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录