试题 算法训练 kAc给糖果你吃
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
kAc有n堆糖果,每堆有A[i]个。
kAc说你只能拿m次糖果,聪明的你当然想要拿最多的糖果来吃啦啦啦~
//第二天,kAc问你还想吃糖果么?(嘿嘿嘿)说着眼角路出奇怪的微笑…
输入格式
第一行两个数字n和m,第二行有n个数字A[i]。
输出格式
输出一行表示最多能拿几个糖果。
样例输入
2 2
1 2
样例输出
3
数据规模和约定
0<n≤1000
其余数字都是不超过1,000,000,000的非负整数。
#include<stdio.h>
int n,m;
long long a[1001]={0},sum=0;
//5 4 3 2 1
//1 4 3 2 5
void quictSort(int left,int right){
if(left>=right){
return;
}
int i=left,j=right;
long long flag=a[left];
while(i<j){
while(a[j]>=flag&&i<j){
j--;
}
while(a[i]<=flag&&i<j){
i++;
}
if(i<j){
a[i]=a[i]^a[j];//a=a^b=c
a[j]=a[i]^a[j];//b=c^b=a
a[i]=a[i]^a[j];//a=c^a=b
}
// for(int k=1;k<=n;k++){
// printf("%lld\t",a[k]);
// }
// printf("\n");
}
long long f=a[i];
a[i]=a[left];
a[left]=f;
// a[i]=a[i]^a[left];
// a[left]=a[i]^a[left];
// a[i]=a[i]^a[left];
// for(int k=1;k<=n;k++){
// printf("%lld\t",a[k]);
// }
// printf("\n");
quictSort(left,i-1);
quictSort(i+1,right);
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
quictSort(1,n);
// for(int i=1;i<=n;i++){
// printf("%lld\t",a[i]);
// }
for(int i=n-m+1;i<=n;i++){
sum+=a[i];
}
printf("%lld",sum);
return 0;
}