結果
| 問題 | 
                            No.1694 ZerOne
                             | 
                    
| コンテスト | |
| ユーザー | 
                             gew1fw
                         | 
                    
| 提出日時 | 2025-06-12 16:29:19 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 2,273 bytes | 
| コンパイル時間 | 531 ms | 
| コンパイル使用メモリ | 81,968 KB | 
| 実行使用メモリ | 73,268 KB | 
| 最終ジャッジ日時 | 2025-06-12 16:29:22 | 
| 合計ジャッジ時間 | 2,990 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 13 WA * 18 | 
ソースコード
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))
            
            
            
        
            
gew1fw