はまやんはまやんはまやん

hamayanhamayan's blog

IPアドレス (Internet Protocol Address) [Aizu Competitive Programming Camp 2018 Day 3 A]

https://onlinejudge.u-aizu.ac.jp/beta/room.html#ACPC2018Day3/problems/A

解法

https://onlinejudge.u-aizu.ac.jp/beta/review.html#ACPC2018Day3/3149687

区切り線を全探索しよう。
各領域について条件を満たすかチェックする。
check関数で領域が条件を満たすかチェックしている。

string S;
//---------------------------------------------------------------------------------------------------
int check(int i, int j) { // S[i..j]
    if (S[i] == '0') {
        int len = j - i + 1;
        if (len == 1) return 1;
        return 0;
    }

    int sm = 0;
    rep(k, i, j + 1) sm = sm * 10 + S[k] - '0';
    return sm <= 255;
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> S;
    int N = S.length();
    int ans = 0;
    rep(a, 1, N) rep(b, a + 1, N) rep(c, b + 1, N) {
        if (check(0, a - 1) and check(a, b - 1) and check(b, c - 1) and check(c, N - 1)) ans++;
    }
    cout << ans << endl;
}