Saruman's Army (POJ#3069)
♥0 |
Line 21 |
Modified 2012-03-06 01:46:49 |
MIT License
archived:2017-03-20 03:50:18
ActionScript3 source code
/**
* Copyright TmskSt ( http://wonderfl.net/user/TmskSt )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/skEs
*/
package {
/*
* Saruman's Army (POJ#3069)
* http://poj.org/problem?id=3069
*
*
* 問題
*
* N個の点が直線上にあります。点iの位置はXiです。N個のうちのいくつかの点を選び、それらの点に印を
* 付けます。N個のすべての点について、距離がR以内の場所に印を付けられた点がなければなりません(自分に印が付いていれば、
* 距離が0のところにあると考えます)。条件を満たすようにしながら、できるだけ印を付ける点を少なくしたいです。何個の点に印をつける必要があるでしょうか。
*
* 『プログラミングコンテストチャレンジブック 第2版』より引用
*/
public class SarumansArmy extends Example {
private static const N:int = 7;//3;
private static const R:int = 10;//0;
private var Xi:Vector.<int> = new <int>[70,30,1,7,15,20,50];//[10,20,20];
public function SarumansArmy () {
Xi.sort(Array.NUMERIC);
var m:int = 0, a:int = 0;
f();
function f(i:int = 1):void {
if (m + i == N ) return;
(Xi[m] + R > Xi[m + i]) ? f(i + 1) : g(i);
}
function g(i:int):void {
a++, m += i, f();
}
trace("Ans : " + a);
}
}
import com.actionscriptbible.Example;
}