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; }