ほねぶろぐ

アニメとAndroidが好きなほねっとのブログです。

AtCoder Beginner Contest 125 にエア参加して

f:id:aftercider:20190428202214p:plain

AtCoder Beginner Contest 125に参加!するつもりだったけど、家庭の事情により今回は参加できず。

あと、EテレのSWITCHインタビューもみなければならなかった。Clusterの加藤さんが出た回。

f:id:aftercider:20190428195950p:plain
SWITCHインタビュー 達人達(たち)「諏訪部順一×加藤直人」

ABC125

f:id:aftercider:20190428195618p:plain

コンテスト後のエア参加だったけど、4問とも難なく回答できた。

C問題

最大公約数っていう、C問題が結構難しそうな雰囲気出してた。

ただ、計算量が線形に落ち着いてたのでいけるかなー?

と思って出したのが無事ACだったのでよかった。

function checkAll(div, As) {
    var mod = 0
    var result = true;
    As.forEach(element => {
        if (element % div > 0) {
            mod++;
            if (mod > 1) {
                result = false;
            }
        }
    });
    return result;
}

function Main(input) {
    const N = parseInt(input.shift());
    var As = input.map(x => parseInt(x));

    As = As.sort((a, b) => { return a - b; }); // 昇順ソート

    var firstDiv = 0;
    var secondDiv = 0;

    for (var div = As[0]; div > 0; div--) {
        if (As[0] % div == 0) {
            // 約数なら
            if (checkAll(div, As)) {
                firstDiv = div;
                break;
            }
        }
    }

    for (var div = As[1]; div > firstDiv; div--) {
        if (As[1] % div == 0) {
            // 約数なら
            if (checkAll(div, As)) {
                secondDiv = div;
                break;
            }
        }
    }

    console.log(Math.max(firstDiv, secondDiv));
}

// 改行・空白で分割
Main(require("fs").readFileSync("/dev/stdin", "utf8").trim().split(/\n|\s/));

D問題

CとDは入れ替えてもよさそうな難易度だった。

function Main(input) {
    const N = parseInt(input.shift())
    const As = input.map(x => parseInt(x));

    var isOdd = false;
    var absSum = 0;
    var minAbs = Number.MAX_SAFE_INTEGER;

    As.forEach(element => {
        if (element < 0) {
            isOdd = !isOdd;
            element *= -1;
        }
        absSum += element;
        minAbs = Math.min(minAbs, element);
    });

    if (isOdd) {
        absSum -= minAbs * 2;
    }

    console.log(absSum);
}

// 改行・空白で分割
Main(require("fs").readFileSync("/dev/stdin", "utf8").trim().split(/\n|\s/));```

# 感想

かなりスムーズにとけたとはいえ、30分くらいはかかってて、順位上位の人たちって何者なんだろうかと謎が深まるABC125だった。

あと、最大公約数・最小公倍数ってのは解く定石があるんですね・・・しらなかった。


[http://tota66.hatenablog.com/entry/2019/04/27/235849:title]


[https://qiita.com/tawatawa/items/408b872a7092be0d7b3c:title]