結果
| 問題 | No.2247 01 ZigZag | 
| コンテスト | |
| ユーザー |  lam6er | 
| 提出日時 | 2025-03-20 20:40:19 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 62 ms / 2,000 ms | 
| コード長 | 2,414 bytes | 
| コンパイル時間 | 293 ms | 
| コンパイル使用メモリ | 82,892 KB | 
| 実行使用メモリ | 81,924 KB | 
| 最終ジャッジ日時 | 2025-03-20 20:40:26 | 
| 合計ジャッジ時間 | 4,331 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 50 | 
ソースコード
n, m, k = map(int, input().split())
def solve():
    if n == 0 and m == 0:
        return -1
    if k == 0:
        if (n == 0 and m == 0) or (n != 0 and m != 0):
            return -1
        return '0' * n + '1' * m if n != 0 else '1' * m
    min_k = 1 if (n > 0 and m > 0) else 0
    a, b = n, m
    if abs(a - b) <= 1:
        max_k = a + b - 1
    else:
        max_k = 2 * min(a, b)
    if k < min_k or k > max_k:
        return -1
    g = k + 1
    x0 = (g + 1) // 2
    y0 = g // 2
    start0_possible = x0 <= a and y0 <= b
    x1 = g // 2
    y1 = (g + 1) // 2
    start1_possible = y1 <= b and x1 <= a
    if not start0_possible and not start1_possible:
        return -1
    if start0_possible:
        use_start0 = True
    else:
        use_start0 = False
    if use_start0:
        x, y = x0, y0
    else:
        x, y = x1, y1
    zero_groups = []
    one_groups = []
    if x > 0:
        first_zero = a - (x - 1)
        zero_groups.append('0' * first_zero)
        zero_groups.extend(['0'] * (x - 1))
    if y > 0:
        if y == 1:
            one_groups.append('1' * b)
        else:
            first_ones = y - 1
            one_groups.extend(['1'] * first_ones)
            remaining_ones = b - first_ones
            if remaining_ones <= 0:
                return -1
            one_groups.append('1' * remaining_ones)
    res = []
    z_idx = 0
    o_idx = 0
    is_zero_turn = use_start0
    while z_idx < len(zero_groups) or o_idx < len(one_groups):
        if is_zero_turn and z_idx < len(zero_groups):
            res.append(zero_groups[z_idx])
            z_idx += 1
            if o_idx < len(one_groups):
                is_zero_turn = False
        elif not is_zero_turn and o_idx < len(one_groups):
            res.append(one_groups[o_idx])
            o_idx += 1
            if z_idx < len(zero_groups):
                is_zero_turn = True
        else:
            if z_idx < len(zero_groups):
                res.append(zero_groups[z_idx])
                z_idx += 1
            elif o_idx < len(one_groups):
                res.append(one_groups[o_idx])
                o_idx += 1
    s = ''.join(res)
    cnt = 0
    for i in range(len(s)-1):
        if s[i] != s[i+1]:
            cnt += 1
    if cnt != k:
        return -1
    if s.count('0') != a or s.count('1') != b:
        return -1
    return s
ans = solve()
print(ans if ans is not None else -1)
            
            
            
        