結果

問題 No.1694 ZerOne
ユーザー gew1fw
提出日時 2025-06-12 21:22:01
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,273 bytes
コンパイル時間 261 ms
コンパイル使用メモリ 81,912 KB
実行使用メモリ 73,484 KB
最終ジャッジ日時 2025-06-12 21:24:21
合計ジャッジ時間 3,222 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 13 WA * 18
権限があれば一括ダウンロードができます

ソースコード

diff #

def count_possible_strings(s):
    n = len(s)
    c0 = s.count('0')
    c1 = s.count('1')
    
    total = 0
    seen = set()
    
    for k in range(1, n + 1):
        if c0 % k != 0 or c1 % k != 0:
            continue
        block_c0 = c0 // k
        block_c1 = c1 // k
        
        for start in range(n - k + 1):
            block = s[start:start + k]
            current_c0 = block.count('0')
            current_c1 = block.count('1')
            if current_c0 != block_c0 or current_c1 != block_c1:
                continue
            
            m = n // k
            valid = True
            for i in range(m):
                current_block = s[i * k : (i + 1) * k]
                if current_block.count('0') != block_c0 or current_block.count('1') != block_c1:
                    valid = False
                    break
                if current_block != block:
                    valid = False
                    break
            if valid:
                unique_blocks = {}
                for i in range(m):
                    current_block = s[i * k : (i + 1) * k]
                    if current_block in unique_blocks:
                        unique_blocks[current_block] += 1
                    else:
                        unique_blocks[current_block] = 1
                
                from math import factorial
                fact_m = factorial(m)
                denominator = 1
                for cnt in unique_blocks.values():
                    denominator *= factorial(cnt)
                total += fact_m // denominator
                break
    
    seen_s = set()
    from itertools import permutations
    blocks = []
    for i in range(n):
        for j in range(i + 1, n + 1):
            t = s[i:j]
            t_c0 = t.count('0')
            t_c1 = t.count('1')
            for u_start in range(j, n - (j - i) + 1):
                u_end = u_start + (j - i)
                u = s[u_start:u_end]
                u_c0 = u.count('0')
                u_c1 = u.count('1')
                if t_c0 == u_c0 and t_c1 == u_c1:
                    new_s = s[:i] + u + s[j:u_start] + t + s[u_end:]
                    seen_s.add(new_s)
    seen_s.add(s)
    return len(seen_s)

s = input().strip()
print(count_possible_strings(s))
0