fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. //必要があれば,関数をいくつでも追加して良い
  5. int n,q,i;
  6. int *v;
  7.  
  8.  
  9. void setting(){
  10. scanf("%d",&n);
  11. scanf("%d", &q);
  12. v = (int*)malloc(sizeof(int)*n);
  13. if(v==NULL){
  14. printf("ERROR\n");
  15. }
  16. for(i=0;i<n;i++){
  17. scanf("%d",&v[i]);
  18. }
  19.  
  20. }
  21. #define MAX 101
  22. void BucketSort(int a[], int n){
  23. int i,t;
  24. int b[MAX];
  25. for(i=0;i<MAX;i++){
  26. b[i]=0;
  27. }
  28. for(i=0;i<n;i++){
  29. t=a[i];
  30. b[t]++;
  31. }
  32. t=0;
  33. for(i=0;i<MAX;i++){
  34. if(b[i]>=1){
  35. while(b[i]>0){
  36. a[t]=i;
  37. t++;
  38. b[i]--;
  39.  
  40. }
  41. }
  42. }
  43. }
  44.  
  45. void Attack(int a[], int n, int q){
  46. int i,x;
  47. for(i=q;i>0;i--){
  48. x=a[n-1];
  49. a[n-1]=x/2;
  50. BucketSort(v,n);
  51. }
  52. }
  53.  
  54. int Sum(int a[], int n){
  55. int i, sum=0;
  56. for(i=0;i<n;i++){
  57. sum=sum+a[i];
  58. }
  59. return sum;
  60. }
  61.  
  62. int solve(){
  63. int ret;
  64. //ここにプログラムを書く
  65. //ret に答えを入れてメイン関数に返す
  66. //入力を受ける部分も自分で書いてください
  67. //今日の分を含め過去の授業のプログラムが
  68. //参考になるはずです
  69. setting();
  70. BucketSort(v,n);
  71. Attack(v,n,q);
  72. ret=Sum(v,n);
  73. free(v);
  74. return ret;
  75. }
  76.  
  77.  
  78.  
  79. //メイン関数はいじらなくて良い
  80. int main(void){
  81. printf("%d\n",solve());
  82. return 0;
  83. }
  84.  
Success #stdin #stdout 0s 5320KB
stdin
7 2
10 40 60 30 80 5 30
stdout
185