TCO13 Round2B

今さらながら一応書いておくことに。

  • -

250. FruitTrees

問題:りんごをx間隔、キウイをy間隔、ぶどうをz間隔で植えるとき、異なるフルーツの最小距離の最大値は?

  • 各パラメータが2000以内
  • りんごの位置を固定し、キウイの位置とぶどうの位置の全探索を考える。
  • が、各フルーツの位置を決めたときの距離を定数時間で出す方法が分からず…。
  • 2つの距離に絞って考えれば最大距離はgcd以上にはならない
  • 位置aにりんご、位置bにキウイがあれば、最小距離は(b-a)%gcd(x,y)かx-(b-a)%gcd(x,y)
  • で、全探索したら通った
class FruitTrees {
private:
    int gcd(int a, int b){
        return a%b ? gcd(b, a%b) : b;
    }
public:
    int maxDist(int apple, int kiwi, int grape) {
        int res = 0;
        int ab = gcd(apple, kiwi);
        int bc = gcd(kiwi, grape);
        int ca = gcd(grape, apple);
        for(int b=0;b<kiwi;b++){
            for(int c=0;c<grape;c++){
                int d = min(b%ab, (apple-b+ab)%ab);
                d = min(d, min(c%ca, (apple-c+ca)%ca));
                int nc = (c-b+kiwi)%kiwi;
                d = min(d, min(nc%bc, (kiwi-nc+bc)%bc));
                res = max(res, d);
            }
        }
        return res;
    }
};

500. ScotlandYard

問題:タクシー、バス、地下鉄の交通網が与えられる。移動手段の系列から現在地が特定されないように移動するとき、特定されるまでor移動できなくなるまでの最大ステップ数は?

  • まるで分からず、2^50に賭けるしかないのか…と思ってたら終わった。
  • 解法が凄い賢かったので悔しい。
  • -

結果:AC / -- / -- ,+0, 180.75 pt, 185位
レーティング:2402 -> 2399


今回の反省は500解きたかったぜ…という点に尽きます。
同じ部屋に250を式一発で出してた人がいたのはシビれました。