星星来啦 2024-03-30 21:29 采纳率: 70.6%
浏览 3
已结题

一个关于C++的问题

有一个长度为 N 的整数序列 A=(A[1],A[2],…,A[N]),其中所有元素的初始值都设为 0。 此外,还有一个初始值为空的集合 S。
依次执行以下 Q 查询。处理完所有 Q 查询后,找出序列 A 中每个元素的值。第 i 个查询的格式如下:
给出一个整数 x[i]。然后,对于每个 j=1,2,…,N,如果 j∈S,将 |S| 添加到 A[j] 中。
这里,|S| 表示集合 S 中元素的个数。例如,如果 S={3,4,7},那么 |S|=3。

输入格式
N Q
x[1] x[2] …x[Q]

输入样例1
3 4
1 3 3 2
输出样例1
6 2 2

输入样例2
4 6
1 2 3 2 4 2
输出样例2
15 9 12 7

用C++做一下,谢谢!

  • 写回答

2条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    解决这个问题,可以按以下步骤进行:

    1. 首先,根据输入的 N 创建一个大小为 N 的整数数组 A,并初始化所有元素为 0。
    2. 创建一个空集合 S 用来保存查询中的整数。
    3. 遍历输入的查询 x[i] 数组,依次执行以下操作:
      • 将 x[i] 添加到集合 S 中。
      • 对于数组 A 的每个元素 A[j],如果 j 在集合 S 中,则将集合 S 的大小(即 |S|)添加到 A[j] 中。
    4. 遍历数组 A,输出每个元素的值。

    下面是相应的 C++ 代码:

    #include <iostream>
    #include <set>
    #include <vector>
    
    using namespace std;
    
    int main() {
        int N, Q;
        cin >> N >> Q;
    
        vector<int> A(N, 0);
        set<int> S;
    
        for (int i = 0; i < Q; i++) {
            int x;
            cin >> x;
    
            S.insert(x);
    
            for (int j = 0; j < N; j++) {
                if (S.count(j + 1) > 0) {
                    A[j] += S.size();
                }
            }
        }
    
        for (int i = 0; i < N; i++) {
            cout << A[i] << " ";
        }
        cout << endl;
    
        return 0;
    }
    

    以上代码根据输入的查询逐步执行,计算每个元素的值,并输出结果。

    希望对你有帮助!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月30日
  • 已采纳回答 3月30日
  • 创建了问题 3月30日

悬赏问题

  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!