fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct { int n,d,i; } scale_wrk;
  5. int scale_cmp(const void* lv,const void *rv) {
  6. scale_wrk *x=(scale_wrk *)lv, *y=(scale_wrk *)rv;
  7. int u=x->n*y->d, v=y->n*x->d;
  8. return u==v ? (x->i > y->i) : u > v;
  9. }
  10. void scale(int n,int *x,int *w,int D,scale_wrk *t) {
  11. int d,i,s,k;
  12. s=0;for(i=0;i<n;i++) s+=x[i];
  13. d=0;for(i=0;i<n;i++) {
  14. d+=w[i]=x[i]*D/s;
  15. t[i].n=w[i]+1; t[i].d=x[i]; t[i].i=i;
  16. }
  17. if (d>=D) return;
  18. qsort(t,n,sizeof(*t),scale_cmp);
  19. for(k=0;;) {
  20. i=t[k].i; w[i]++; if (++d>=D) break; ++t[k].n;
  21. if (scale_cmp(t+k,t+n-1)) k++;
  22. else {
  23. if (scale_cmp(t+k,t+k+1))
  24. qsort(t+k,n-k,sizeof(*t),scale_cmp);
  25. }
  26. }
  27. }
  28.  
  29. int main(int argc,char **argv) {
  30. enum { n=5 };
  31. scale_wrk t[n];
  32. int i,D,w[n],x[n]={ 30,3,3,31,30 };
  33. for(D=1;D<=200;D++) {
  34. scale(n,x,w,D,t);
  35. printf("%3d:",D);
  36. for(i=0;i<n;i++) printf(" %2d",w[i]);
  37. printf("\n");
  38. }
  39. return 0;
  40. }
Success #stdin #stdout 0s 4564KB
stdin
Standard input is empty
stdout
  1:  0  0  0  1  0
  2:  1  0  0  1  0
  3:  1  0  0  1  1
  4:  1  0  0  2  1
  5:  2  0  0  2  1
  6:  2  0  0  2  2
  7:  2  0  0  3  2
  8:  3  0  0  3  2
  9:  3  0  0  3  3
 10:  3  0  0  4  3
 11:  4  0  0  4  3
 12:  4  0  0  4  4
 13:  4  0  0  5  4
 14:  5  0  0  5  4
 15:  5  0  0  5  5
 16:  5  0  0  6  5
 17:  6  0  0  6  5
 18:  6  0  0  6  6
 19:  6  0  0  7  6
 20:  7  0  0  7  6
 21:  7  0  0  7  7
 22:  7  0  0  8  7
 23:  8  0  0  8  7
 24:  8  0  0  8  8
 25:  8  0  0  9  8
 26:  9  0  0  9  8
 27:  9  0  0  9  9
 28:  9  0  0 10  9
 29: 10  0  0 10  9
 30: 10  1  0 10  9
 31: 10  1  1 10  9
 32: 10  1  1 10 10
 33: 10  1  1 11 10
 34: 11  1  1 11 10
 35: 11  1  1 11 11
 36: 11  1  1 12 11
 37: 12  1  1 12 11
 38: 12  1  1 12 12
 39: 12  1  1 13 12
 40: 13  1  1 13 12
 41: 13  1  1 13 13
 42: 13  1  1 14 13
 43: 14  1  1 14 13
 44: 14  1  1 14 14
 45: 14  1  1 15 14
 46: 15  1  1 15 14
 47: 15  1  1 15 15
 48: 15  1  1 16 15
 49: 16  1  1 16 15
 50: 16  1  1 16 16
 51: 16  1  1 17 16
 52: 17  1  1 17 16
 53: 17  1  1 17 17
 54: 17  1  1 18 17
 55: 18  1  1 18 17
 56: 18  1  1 18 18
 57: 18  1  1 19 18
 58: 19  1  1 19 18
 59: 19  1  1 19 19
 60: 19  1  1 20 19
 61: 20  1  1 20 19
 62: 20  2  1 20 19
 63: 20  2  2 20 19
 64: 20  2  2 20 20
 65: 20  2  2 21 20
 66: 21  2  2 21 20
 67: 21  2  2 21 21
 68: 21  2  2 22 21
 69: 22  2  2 22 21
 70: 22  2  2 22 22
 71: 22  2  2 23 22
 72: 23  2  2 23 22
 73: 23  2  2 23 23
 74: 23  2  2 24 23
 75: 24  2  2 24 23
 76: 24  2  2 24 24
 77: 24  2  2 25 24
 78: 25  2  2 25 24
 79: 25  2  2 25 25
 80: 25  2  2 26 25
 81: 26  2  2 26 25
 82: 26  2  2 26 26
 83: 26  2  2 27 26
 84: 27  2  2 27 26
 85: 27  2  2 27 27
 86: 27  2  2 28 27
 87: 28  2  2 28 27
 88: 28  2  2 28 28
 89: 28  2  2 29 28
 90: 29  2  2 29 28
 91: 29  2  2 29 29
 92: 29  2  2 30 29
 93: 30  2  2 30 29
 94: 30  3  2 30 29
 95: 30  3  3 30 29
 96: 30  3  3 31 29
 97: 30  3  3 31 30
 98: 30  3  3 32 30
 99: 31  3  3 32 30
100: 31  3  3 32 31
101: 31  3  3 33 31
102: 32  3  3 33 31
103: 32  3  3 33 32
104: 32  3  3 34 32
105: 33  3  3 34 32
106: 33  3  3 34 33
107: 33  3  3 35 33
108: 34  3  3 35 33
109: 34  3  3 35 34
110: 34  3  3 36 34
111: 35  3  3 36 34
112: 35  3  3 36 35
113: 35  3  3 37 35
114: 36  3  3 37 35
115: 36  3  3 37 36
116: 36  3  3 38 36
117: 37  3  3 38 36
118: 37  3  3 38 37
119: 37  3  3 39 37
120: 38  3  3 39 37
121: 38  3  3 39 38
122: 38  3  3 40 38
123: 39  3  3 40 38
124: 39  3  3 40 39
125: 39  3  3 41 39
126: 40  3  3 41 39
127: 40  4  3 41 39
128: 40  4  4 41 39
129: 40  4  4 41 40
130: 40  4  4 42 40
131: 41  4  4 42 40
132: 41  4  4 42 41
133: 41  4  4 43 41
134: 42  4  4 43 41
135: 42  4  4 43 42
136: 42  4  4 44 42
137: 43  4  4 44 42
138: 43  4  4 44 43
139: 43  4  4 45 43
140: 44  4  4 45 43
141: 44  4  4 45 44
142: 44  4  4 46 44
143: 45  4  4 46 44
144: 45  4  4 46 45
145: 45  4  4 47 45
146: 46  4  4 47 45
147: 46  4  4 47 46
148: 46  4  4 48 46
149: 47  4  4 48 46
150: 47  4  4 48 47
151: 47  4  4 49 47
152: 48  4  4 49 47
153: 48  4  4 49 48
154: 48  4  4 50 48
155: 49  4  4 50 48
156: 49  4  4 50 49
157: 49  4  4 51 49
158: 50  4  4 51 49
159: 50  5  4 51 49
160: 50  5  5 51 49
161: 50  5  5 51 50
162: 50  5  5 52 50
163: 51  5  5 52 50
164: 51  5  5 52 51
165: 51  5  5 53 51
166: 52  5  5 53 51
167: 52  5  5 53 52
168: 52  5  5 54 52
169: 53  5  5 54 52
170: 53  5  5 54 53
171: 53  5  5 55 53
172: 54  5  5 55 53
173: 54  5  5 55 54
174: 54  5  5 56 54
175: 55  5  5 56 54
176: 55  5  5 56 55
177: 55  5  5 57 55
178: 56  5  5 57 55
179: 56  5  5 57 56
180: 56  5  5 58 56
181: 57  5  5 58 56
182: 57  5  5 58 57
183: 57  5  5 59 57
184: 58  5  5 59 57
185: 58  5  5 59 58
186: 58  5  5 60 58
187: 59  5  5 60 58
188: 59  5  5 60 59
189: 59  5  5 61 59
190: 60  5  5 61 59
191: 60  6  5 61 59
192: 60  6  6 61 59
193: 60  6  6 62 59
194: 60  6  6 62 60
195: 60  6  6 63 60
196: 61  6  6 63 60
197: 61  6  6 63 61
198: 61  6  6 64 61
199: 62  6  6 64 61
200: 62  6  6 64 62