質問編集履歴

4

コード変更

2018/09/19 09:56

投稿

zeitaku_fire
zeitaku_fire

スコア26

test CHANGED
File without changes
test CHANGED
File without changes

3

コード変更

2018/09/19 09:56

投稿

zeitaku_fire
zeitaku_fire

スコア26

test CHANGED
File without changes
test CHANGED
@@ -309,3 +309,59 @@
309
309
 
310
310
 
311
311
  ```
312
+
313
+
314
+
315
+ 【コード完成】
316
+
317
+ ```python
318
+
319
+ n,high = map(int,input().split())
320
+
321
+ li = list(map(int,input().split()))
322
+
323
+ max_li = max(li)
324
+
325
+ li = [i for i in li if i + max_li >= high] # 一番高い雪を足しても、高さが満たさない雪だまは削除
326
+
327
+ li = sorted(li)
328
+
329
+ cou = 0
330
+
331
+ ind_max = len(li)-1 # 5
332
+
333
+ ind_min = 0
334
+
335
+
336
+
337
+ while li:
338
+
339
+ obj = 0
340
+
341
+ value = high - li[ind_max] #value値以上の最小を見つける
342
+
343
+ for i in range(ind_min,ind_max):
344
+
345
+ if li[i] >= value : #見つかった。
346
+
347
+ obj = li[i]
348
+
349
+ break
350
+
351
+ if obj == 0: #見つからなかった。
352
+
353
+ break
354
+
355
+ else: #見つかった
356
+
357
+ cou +=1
358
+
359
+ ind_max -=1
360
+
361
+ ind_min = i +1
362
+
363
+
364
+
365
+ print(cou)
366
+
367
+ ```

2

コード変更

2018/09/19 09:55

投稿

zeitaku_fire
zeitaku_fire

スコア26

test CHANGED
File without changes
test CHANGED
@@ -249,3 +249,63 @@
249
249
  print(cou)
250
250
 
251
251
  ```
252
+
253
+
254
+
255
+ 【再追記】
256
+
257
+ ご教授いただいた点を考慮。
258
+
259
+ コード再作成。
260
+
261
+ ```python
262
+
263
+ high = 8
264
+
265
+ li = [4,6,5,1,5,3]
266
+
267
+ li = [i for i in li if i + max(li) >= high] # 一番高い数値を足しても、規定値を満たさない値は、事前に削除
268
+
269
+ li = sorted(li)
270
+
271
+ cou = 0
272
+
273
+ ind_max = len(li)-1
274
+
275
+ ind_min = 0
276
+
277
+
278
+
279
+ while li:
280
+
281
+ obj = 0
282
+
283
+ value = high - li[ind_max] #value値以上の最小を見つける
284
+
285
+ for i in range(ind_min,ind_max):
286
+
287
+ if li[i] >= value : #見つかった。
288
+
289
+ obj = li[i]
290
+
291
+ break
292
+
293
+ if obj == 0: #見つからなかった。
294
+
295
+ break
296
+
297
+ else: #見つかった
298
+
299
+ cou +=1
300
+
301
+ ind_max -=1
302
+
303
+ ind_min = i +1 #リストの値を削除するのではなく、移動
304
+
305
+
306
+
307
+ print(cou)
308
+
309
+
310
+
311
+ ```

1

ご解答頂いた内容を反映

2018/09/19 08:54

投稿

zeitaku_fire
zeitaku_fire

スコア26

test CHANGED
File without changes
test CHANGED
@@ -193,3 +193,59 @@
193
193
 
194
194
 
195
195
  どうぞよろしくお願いします。
196
+
197
+
198
+
199
+
200
+
201
+ 【追記】
202
+
203
+ ご解答頂いた内容でコード作成しました。
204
+
205
+ 速度は少し改善できました。ありがとうございます。
206
+
207
+ しかし、TLEはおきてしまっています。
208
+
209
+ ```python
210
+
211
+ high = 8
212
+
213
+ li = [4,6,5,1,5,3]
214
+
215
+ li = [i for i in li if i + max(li) >= high] # 一番高い数値を足しても、規定値を満たさない値は、事前に削除
216
+
217
+ li = sorted(li)
218
+
219
+ cou = 0
220
+
221
+
222
+
223
+ while li:
224
+
225
+ obj = 0
226
+
227
+ value = high - li[-1] #value値以上の最小を見つける
228
+
229
+ for line,i in enumerate(li):
230
+
231
+ if i >= value and line+1 < len(li): #後半の条件は、末尾でないということ
232
+
233
+ obj = li[line] #見つかった。
234
+
235
+ break
236
+
237
+ if obj == 0: #見つからなかった。
238
+
239
+ break
240
+
241
+ else:
242
+
243
+ cou +=1
244
+
245
+ del li[-1]
246
+
247
+ del li[:line+1]
248
+
249
+ print(cou)
250
+
251
+ ```