fork download
  1. <?php
  2.  
  3. list($numberOfGems, $firstJump, $maxIsland, $islandToGemCount) = readInput();
  4. $dag = createDAG($firstJump, $maxIsland);
  5. $sortedVerts = topologicalSort($dag);
  6. echo getMaxDistance($sortedVerts, $firstJump, $islandToGemCount, $numberOfGems, $dag);
  7.  
  8. function getMaxDistance($sortedVerts, $firstJump, $islandToGemCount, $numberOfGems, $dag) {
  9. $dist = array();
  10. $maxDist = $dist[$firstJump] = weight($firstJump, $islandToGemCount);
  11. foreach ($sortedVerts as $u) {
  12. if (!isset($dist[$u]))
  13. $dist[$u] = -1;
  14. $adj = array_keys($dag[$u]);
  15. foreach ($adj as $v) {
  16. if (!isset($dist[$v]))
  17. $dist[$v] = -1;
  18. if ($dist[$v] < ($dist[$u] + weight($v, $islandToGemCount))) {
  19. $dist[$v] = $dist[$u] + weight($v, $islandToGemCount);
  20. if ($dist[$v] > $maxDist) {
  21. $maxDist = $dist[$v];
  22. if ($maxDist >= $numberOfGems) {
  23. break;
  24. }
  25. }
  26. }
  27. }
  28.  
  29. if ($maxDist >= $numberOfGems) {
  30. break;
  31. }
  32. }
  33. return $maxDist;
  34. }
  35.  
  36. function readInput() {
  37. $row = explode(" ", trim(fgets(STDIN)));
  38. $numberOfGems = $row[0];
  39. $firstJump = $row[1];
  40. $maxIsland = 0;
  41. $islandToGemCount = array();
  42. for ($i = 0; $i < $numberOfGems; $i++) {
  43. $curr_p = trim(fgets(STDIN));
  44. if ($curr_p > $maxIsland)
  45. $maxIsland = $curr_p;
  46. if (!isset($islandToGemCount[$curr_p]))
  47. $islandToGemCount[$curr_p] = 0;
  48. $islandToGemCount[$curr_p] += 1;
  49. }
  50. return array($numberOfGems, $firstJump, $maxIsland, $islandToGemCount);
  51. }
  52.  
  53. function createDAG($firstJump, $maxIsland) {
  54. $dag = array();
  55. addEdges($firstJump, $firstJump, $maxIsland, $dag);
  56. return $dag;
  57. }
  58.  
  59. function weight($v, $islandToGemCount) {
  60. return (isset($islandToGemCount[$v]) ? $islandToGemCount[$v] : 0);
  61. }
  62.  
  63. function addEdges($vert, $jump, $maxIsland, &$dag) {
  64. if ($jump <= 0)
  65. return;
  66. if (!isset($dag[$vert])) {
  67. $dag[$vert] = array();
  68. }
  69. $init = $jump - 1;
  70. for ($i = $init; $i <= $init + 2; $i++) {
  71. $newVert = $vert + $i;
  72. if (($newVert > 0) && ($newVert <= $maxIsland) && ($newVert != $vert) && (!isset($dag[$vert][$newVert]))) {
  73. //echo "adding edge $vert to $newVert\n";
  74. $dag[$vert][$newVert] = 1;
  75. addEdges($newVert, $i, $maxIsland, $dag);
  76. }
  77. }
  78. }
  79.  
  80. function topologicalSort($dag) {
  81. $visited = array();
  82. $queue = array();
  83. foreach ($dag as $vert => $data) {
  84. if (!isset($visited[$vert])) {
  85. visit($dag, $vert, $visited, $queue);
  86. }
  87. }
  88. $stack = array_reverse($queue);
  89. return $stack;
  90. }
  91.  
  92. function visit($dag, $vert, &$visited, &$queue) {
  93. $visited[$vert] = true;
  94. $adj_list = array_keys($dag[$vert]);
  95. foreach ($adj_list as $adj) {
  96. if (!isset($visited[$adj])) {
  97. visit($dag, $adj, $visited, $queue);
  98. }
  99. }
  100. $queue[] = $vert;
  101. }
  102.  
  103. ?>
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:1: error: class, interface, or enum expected
<?php
^
Main.java:1: error: class, interface, or enum expected
<?php
 ^
Main.java:1: error: class, interface, or enum expected
<?php
  ^
Main.java:4: error: class, interface, or enum expected
$dag = createDAG($firstJump, $maxIsland);
^
Main.java:5: error: class, interface, or enum expected
$sortedVerts = topologicalSort($dag);
^
Main.java:6: error: class, interface, or enum expected
echo getMaxDistance($sortedVerts, $firstJump, $islandToGemCount, $numberOfGems, $dag);
^
Main.java:8: error: class, interface, or enum expected
function getMaxDistance($sortedVerts, $firstJump, $islandToGemCount, $numberOfGems, $dag) {
^
Main.java:10: error: class, interface, or enum expected
	$maxDist = $dist[$firstJump] = weight($firstJump, $islandToGemCount);
	^
Main.java:11: error: class, interface, or enum expected
	foreach ($sortedVerts as $u) {
	^
Main.java:14: error: class, interface, or enum expected
		$adj = array_keys($dag[$u]);
		^
Main.java:15: error: class, interface, or enum expected
		foreach ($adj as $v) {
		^
Main.java:18: error: class, interface, or enum expected
			if ($dist[$v] < ($dist[$u] + weight($v, $islandToGemCount))) {
			^
Main.java:20: error: class, interface, or enum expected
				if ($dist[$v] > $maxDist) {
				^
Main.java:22: error: class, interface, or enum expected
					if ($maxDist >= $numberOfGems) {
					^
Main.java:24: error: class, interface, or enum expected
					}
					^
Main.java:31: error: class, interface, or enum expected
		}
		^
Main.java:34: error: class, interface, or enum expected
}
^
Main.java:38: error: class, interface, or enum expected
	$numberOfGems = $row[0];
	^
Main.java:39: error: class, interface, or enum expected
	$firstJump = $row[1];
	^
Main.java:40: error: class, interface, or enum expected
	$maxIsland = 0;
	^
Main.java:41: error: class, interface, or enum expected
	$islandToGemCount = array();
	^
Main.java:42: error: class, interface, or enum expected
	for ($i = 0; $i < $numberOfGems; $i++) {
	^
Main.java:42: error: class, interface, or enum expected
	for ($i = 0; $i < $numberOfGems; $i++) {
	             ^
Main.java:42: error: class, interface, or enum expected
	for ($i = 0; $i < $numberOfGems; $i++) {
	                                 ^
Main.java:44: error: class, interface, or enum expected
		if ($curr_p > $maxIsland)
		^
Main.java:46: error: class, interface, or enum expected
		if (!isset($islandToGemCount[$curr_p]))
		^
Main.java:48: error: class, interface, or enum expected
		$islandToGemCount[$curr_p] += 1;
		^
Main.java:49: error: class, interface, or enum expected
	}
	^
Main.java:51: error: class, interface, or enum expected
}
^
Main.java:55: error: class, interface, or enum expected
	addEdges($firstJump, $firstJump, $maxIsland, $dag);
	^
Main.java:56: error: class, interface, or enum expected
	return $dag;
	^
Main.java:57: error: class, interface, or enum expected
}
^
Main.java:61: error: class, interface, or enum expected
}
^
Main.java:66: error: class, interface, or enum expected
	if (!isset($dag[$vert])) {
	^
Main.java:68: error: class, interface, or enum expected
	}
	^
Main.java:70: error: class, interface, or enum expected
	for ($i = $init; $i <= $init + 2; $i++) {
	^
Main.java:70: error: class, interface, or enum expected
	for ($i = $init; $i <= $init + 2; $i++) {
	                 ^
Main.java:70: error: class, interface, or enum expected
	for ($i = $init; $i <= $init + 2; $i++) {
	                                  ^
Main.java:72: error: class, interface, or enum expected
		if (($newVert > 0) && ($newVert <= $maxIsland) && ($newVert != $vert) && (!isset($dag[$vert][$newVert]))) {
		^
Main.java:75: error: class, interface, or enum expected
			addEdges($newVert, $i, $maxIsland, $dag);
			^
Main.java:76: error: class, interface, or enum expected
		}
		^
Main.java:82: error: class, interface, or enum expected
	$queue = array();
	^
Main.java:83: error: class, interface, or enum expected
	foreach ($dag as $vert => $data) {
	^
Main.java:86: error: class, interface, or enum expected
		}
		^
Main.java:89: error: class, interface, or enum expected
	return $stack;
	^
Main.java:90: error: class, interface, or enum expected
}
^
Main.java:94: error: class, interface, or enum expected
	$adj_list = array_keys($dag[$vert]);
	^
Main.java:95: error: class, interface, or enum expected
	foreach ($adj_list as $adj) {
	^
Main.java:98: error: class, interface, or enum expected
		}
		^
Main.java:101: error: class, interface, or enum expected
}
^
50 errors
stdout
Standard output is empty