Statement
- L[i] is the amount of luck associated with a contest. If Lena wins the contest, her luck balance will decrease by L[i]; if she loses it, her luck balance will increase by L[i].
- T[i] denotes the contest's importance rating. It's equal to 1 if the contest is important, and it's equal to 0 if it's unimportant.
If Lena loses no more than important contests, what is the maximum amount of luck she can have after competing in all the preliminary contests? This value may be negative.
Example
K = 2
L = [5,1,4]
T = [1,2,0]
Contest | L[i] | T[i] |
1 | 5 | 1 |
2 | 1 | 1 |
3 | 4 | 0 |
If Lena loses all of the contests, her will be 5+4+1 = 10. Since she is allowed to lose 2 important contests, and there are only 2 important contests, she can lose all three contests to maximize her luck at 10.
If k=1, she has to win at least 1 of the 2 important contests. She would choose to win the lowest value important contest worth 1. Her final luck will be 5+4-1=8.
Function Description
Complete the luckBalance function in the editor below.
luckBalance has the following parameter(s):
- int k: the number of important contests Lena can lose
- int contests[n][2]: a 2D array of integers where each contains two integers that represent the luck balance and importance of the ith contest
Returns
- int: the maximum luck balance achievable
Solution in C:
/*
* Complete the 'luckBalance' function below.
*
* The function is expected to return an INTEGER.
* The function accepts following parameters:
* 1. INTEGER k
* 2. 2D_INTEGER_ARRAY contests
*/
int compare(const void *a, const void *b){
return (*(int*)b-*(int*)a);
}
int luckBalance(int k, int contests_rows, int contests_columns, int** contests) {
int imp_contest[100];
int imp_contest_length = 0;
int luckBalance = 0;
for (int i=0; i<contests_rows; i++) {
if(contests[i][1]==1){
imp_contest[imp_contest_length]=contests[i][0];
imp_contest_length++;
}
else {
luckBalance+=contests[i][0];
}
}
qsort(imp_contest, imp_contest_length, sizeof(int), compare);
printf("%d %d\n",k,imp_contest_length);
int n = (k<imp_contest_length)?k:imp_contest_length;
printf("%d",n);
for (int i=0; i<n; i++) {
luckBalance += imp_contest[i];
}
for (int i=k; i<imp_contest_length; i++) {
luckBalance-=imp_contest[i];
}
return luckBalance;
}
//Solution End here. Driver code starts below ;)
Labels : #array in c ,#c program ,#hackerrank ,#hackerrank c ,