Bootstrap

打卡信奥刷题(520)用C++信奥P6725[普及组/提高] [COCI2015-2016#5] PERICA

[COCI2015-2016#5] PERICA

题目描述

给定一个长度为 N N N 的序列 a 1 , a 2 , … , a N a_1,a_2,\dots,a_N a1,a2,,aN

请你求出所有 K K K 个数的组合中最大数之和   m o d     1 0 9 + 7 \bmod\ 10^9+7 mod 109+7 的结果。

输入格式

输入第一行两个整数 N , K N,K N,K

第二行一个长度为 N N N 的序列 a 1 , a 2 , … , a N a_1,a_2,\dots, a_N a1,a2,,aN

输出格式

输出一行一个整数,为所有 K K K 个数的组合中最大数之和   m o d     1 0 9 + 7 \bmod\ 10^9+7 mod 109+7 的结果。

样例 #1

样例输入 #1

5 3
2 4 2 3 4

样例输出 #1

39

样例 #2

样例输入 #2

5 1
1 0 1 1 1

样例输出 #2

4

样例 #3

样例输入 #3

5 2
3 3 4 0 0

样例输出 #3

31

提示

样例解释
样例 1 1 1

所有的 K K K 个数的组合为: [ 2 , 4 , 2 ] , [ 2 , 4 , 3 ] , [ 2 , 4 , 4 ] , [ 2 , 2 , 3 ] , [ 2 , 2 , 4 ] , [ 2 , 3 , 4 ] , [ 4 , 2 , 3 ] , [ 4 , 2 , 4 ] , [ 4 , 3 , 4 ] , [ 2 , 3 , 4 ] [2, 4, 2], [2, 4, 3], [2, 4, 4], [2, 2, 3], [2, 2, 4], [2, 3, 4], [4, 2, 3], [4, 2, 4], [4, 3, 4], [2, 3, 4] [2,4,2],[2,4,3],[2,4,4],[2,2,3],[2,2,4],[2,3,4],[4,2,3],[4,2,4],[4,3,4],[2,3,4]

数据规模与约定

对于 40 % 40\% 40% 的数据, N ≤ 1 0 3 N\le 10^3 N103
对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 1 0 5 1\le N\le 10^5 1N105 1 ≤ K ≤ 50 1\le K\le 50 1K50

说明

题目译自 COCI2015-2016 CONTEST #5 T3 PERICA

C++实现

#include<bits/stdc++.h>
using namespace std;
int n, k, ans, a[100005], c[100005][55];
int main(){
cin >> n >> k;
c[0][0] = 1;
for(int i = 1; i <= n; i ++){
c[i][0] = 1;
for(int j = 1; j <= min(i, k); j ++)
c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % 1000000007;
}
for(int i = 1; i <= n; i ++) cin >> a[i];
sort(a + 1, a + n + 1);
for(int i = k; i <= n; i ++)
ans = (ans +(1ll * c[i - 1][k - 1] * a[i] % 1000000007)) % 1000000007;
printf(“%d”, ans);
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

;