Hatena::Grouptopcoder

yambe2002の日記

 | 

2016-01-20

下書き:SRM678 Div2 Hard: RevengeOfTheSith

13:47

N段の階段step[]があり、step[i]はi-1番目とi番目の高さの差である(下の段から。iがゼロのときは床からの高さ)。

最上段から1段ずつ降りて行ったとき、ダメージが最小になるようにしたい。

条件は、

・1段降りたときのダメージは(H-D)^2。Hは高さの差。H<=Dならノーダメージ

・床と、一番上の段以外は好きな高さに変えられる(T個まで)。ただし、段の順番は変えてはならない。

・各段の高さを変えた後で、降りるのをスタートする

・高さは整数値のみ

1 <= stepの長さ <= 50

1 <= stepの要素の値 <= 1000

1 <= D <= 1000

0 <= T <= stepの長さ-1



SRM678結果:○○-

Div1は遠い。

SRM678 Div2 Mid: AttackOfTheClones

13:37

オビさんはTシャツをN毎もっている。そして、この世界では一週間はN日である。

彼は一週間、毎日違うTシャツを着たい。Tシャツは着たら洗う必要があり、洗うのには最低でN-2日かかる。

最初の週のTシャツを着る順番と、最後の週のTシャツを着る順番が与えられる。

このとき、最後の週の順番にするまで、何週間かかるか。


もっとも日数がかかるTシャツは、最終週の位置が最初の週より前にあるもので、差が最大のもにになる。これを返せばよい。

    public int count(int[] firstWeek, int[] lastWeek) {
        var f = firstWeek.ToList();
        var l = lastWeek.ToList();

        int res = 1;

        for (int idx = lastWeek.Length - 1; idx > 0; idx--)
        {
            var tgt = f[idx];
            var tgtIdx = l.IndexOf(tgt);

            if (tgtIdx < idx) res = Math.Max(res, idx - tgtIdx + 1);
        }

        return res;
    }
 |