fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // swap関数(未使用なので一時的にコメントアウト)
  5. // void swap(int *a, int *b){
  6. // int tmp = *a;
  7. // *a = *b;
  8. // *b = tmp;
  9. // }
  10.  
  11. // 最大値のインデックスを返す関数
  12. int getMax(int arr[], int size) {
  13. int maxIndex = 0;
  14. for (int i = 1; i < size; i++) {
  15. if (arr[maxIndex] < arr[i]) {
  16. maxIndex = i;
  17. }
  18. }
  19. return maxIndex;
  20. }
  21.  
  22. int solve() {
  23. int ret = 0;
  24. int n, q;
  25.  
  26. // 入力
  27. scanf("%d %d", &n, &q);
  28.  
  29. int *d = (int *)malloc(n * sizeof(int));
  30. if (d == NULL) {
  31. printf("ERROR\n");
  32. return -1;
  33. }
  34.  
  35. for (int i = 0; i < n; i++) {
  36. scanf("%d", &d[i]);
  37. }
  38.  
  39. // q回、防御力最大のモンスターにボールを投げて半減させる
  40. for (int i = 0; i < q; i++) {
  41. int maxIdx = getMax(d, n);
  42. d[maxIdx] /= 2;
  43. }
  44.  
  45. // 総和を計算
  46. for (int i = 0; i < n; i++) {
  47. ret += d[i];
  48. }
  49.  
  50. free(d);
  51. return ret;
  52. }
  53.  
  54. int main(void) {
  55. printf("%d\n", solve());
  56. return 0;
  57. }
Success #stdin #stdout 0s 5312KB
stdin
7 2
10 40 60 30 80 5 30

stdout
185