fork download
  1. <?php
  2. // paiza POH! Vol.1
  3. // result:
  4. // http://p...content-available-to-author-only...a.jp/poh/ec-campaign/result/f9f83f0dfa6a1a9390593c2f38277336
  5. // author: Leonardone @ NEETSDKASU
  6. $p = array();
  7. function foo(&$p, $f, $e, &$m) {
  8. if (($df = $e - $f) < 5) return $e;
  9. if ($m < $p[$ci = ($f + ($df >> 1))]) {
  10. return foo($p, $f, $ci, $m);
  11. } else {
  12. return foo($p, $ci, $e, $m);
  13. }
  14. }
  15. function bar(&$p, $f, $e, &$m) {
  16. if (($df = $e - $f) < 5) return $f;
  17. if ($m > $p[$ci = ($f + ($df >> 1))]) {
  18. return bar($p, $ci, $e, $m);
  19. } else {
  20. return bar($p, $f, $ci, $m);
  21. }
  22. }
  23.  
  24. $nd = explode(" ",fgets(STDIN));
  25. $n = (int)$nd[0];
  26. $d = (int)$nd[1];
  27. for ($j=0;$j<$n;++$j) { $p[$j] = (int)fgets(STDIN); }
  28. sort($p, SORT_NUMERIC);
  29. --$n;
  30. do {
  31. $m = (int)fgets(STDIN);
  32. $tmp = 0;
  33. $f = foo($p, 0, $n, $m);
  34. while ($p[$f] >= $m) --$f;
  35. if (($df = $m - $p[$f]) <= $p[$f]) {
  36. $e = bar($p, 0, $f, $df);
  37. do {
  38. while ($df > $p[$e]) ++$e;
  39. if (($df < $p[$e]) || ($f == $e)) if ($e > 0) --$e;
  40. if (($sum = $p[$f] + $p[$e]) > $tmp) {
  41. if ($sum <= $m)
  42. if (($tmp = $sum) == $m) break;
  43. }
  44. --$f;
  45. } while (($df = $m - $p[$f]) <= $p[$f]);
  46. }
  47. echo $tmp, PHP_EOL;
  48. } while (--$d);
Success #stdin #stdout 0.01s 20568KB
stdin
10 6
4500
13300
1100
2200
25100
4000
3000
1000
2000
5000
10000
3000
15000
30000
4000
5600
stdout
9500
3000
14400
29600
4000
5600