CPP-SCNUOJ-Problem P23. 计数排序(使用C/C++)

Problem P23. 计数排序(使用C/C++)
计下标从 1 开始。有n 个取值范围在 [1,m] 的整数ai 。请将它们升序排序,设排序后数组为b 。为避免输出过长,请输出:
在这里插入图片描述

输入

在这里插入图片描述

输出

输出一个整数代表计算结果

样例

标准输入
10 3
1 2 3 2 2 3 3 1 3 3
标准输出
147

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define mn 10000005
/*
全局变量初始值默认0
a:储存数字
b:储存排序后的数组
c:计算数组a中每个数字出现的次数
n:n个数字
m:数字大小范围在1-m内
*/
int a[mn], b[mn], c[mn], n, m, bi, mod = 1e9 + 7;
long long ans;
int main()
{
   
    cin >> n >> m;
    for(int i=1; i<=n; i++)//读取n个数字
    {
   
        scanf("%d", &a[i]);
        c[a[i]]++;//ai这个数字出现的次数
    }
    for(int i=1; i<=m; i++)//对数组a中数字排序,数组a中的数字只有1-m;
    {
   
        for(int j=1; j<=c[i]; j++)//排序好储存在新数组b中
        {
   
            b[++bi] = i;//bi初始默认值为0,这里从b[1]开始的,所以用++bi;
        }
    }
    for(int i=0; i<=n; i++)//输出公式的求和
    {
   
        /*
        复合赋值运算符“%=”,
        表示的意思是先将运算符左边操作数指向的变量值和右边的操作数执行取余操作,
        然后再将取余的结果赋值给左边的操作数指向的变量
        */
        (ans += 1LL * i * b[i]) %= mod;
    }
    cout << ans;
//    cout << "Hello world!" << endl;
    return 0;
}

相关推荐

  1. CCF-CSP 202303-2 垦田计划

    2023-12-05 19:20:02       35 阅读
  2. CCF-CSP 202303-2 垦田计划

    2023-12-05 19:20:02       33 阅读
  3. CCF-CSP 202212-1 现值计算

    2023-12-05 19:20:02       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-05 19:20:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-05 19:20:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-05 19:20:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-05 19:20:02       20 阅读

热门阅读

  1. vue form表单的封装--使用的是elementUI

    2023-12-05 19:20:02       43 阅读
  2. 后端常用的方法

    2023-12-05 19:20:02       39 阅读
  3. 在CentOS 8.2中安装Percona Xtrabackup 8.0.x备份MySql

    2023-12-05 19:20:02       33 阅读
  4. AtCoder Beginner Contest 331

    2023-12-05 19:20:02       41 阅读