[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
N≤103;
对于
100
%
100\%
100% 的数据,
1
≤
N
≤
1
0
5
1\le N\le 10^5
1≤N≤105,
1
≤
K
≤
50
1\le K\le 50
1≤K≤50。
说明
题目译自 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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容