permutation modulo 10

Added: 2025-09-19 05:40:00

Question Image

permutation modulo 10

Answer

✏️ Edit
import sys
import math

MOD = 10**9 + 7

# Precompute factorials up to 5 * 10^5 (since sum of N across tests ≤ 5e5)
MAX = 5 * 10**5 + 5
fact = [1] * (MAX)
for i in range(1, MAX):
    fact[i] = (fact[i-1] * i) % MOD

def solve():
    input_data = sys.stdin.read().strip().split()
    t = int(input_data[0])
    idx = 1
    results = []
    
    for _ in range(t):
        N, K = int(input_data[idx]), int(input_data[idx+1])
        idx += 2
        A = list(map(int, input_data[idx:idx+N]))
        idx += N
        
        cnt_even = sum(1 for x in A if x % 2 == 0)
        cnt_odd = N - cnt_even
        
        odd_pos = (N + 1) // 2
        even_pos = N // 2
        
        ans = 0
        
        if K == 0:
            # All must be same parity
            if cnt_even == N or cnt_odd == N:
                ans = fact[N]
            else:
                ans = 0
        
        else:  # K == 1
            # Case 1: odd positions = odd numbers, even positions = even numbers
            if cnt_odd >= odd_pos and cnt_even >= even_pos:
                ans = (ans + fact[odd_pos] * fact[even_pos]) % MOD
            
            # Case 2: odd positions = even numbers, even positions = odd numbers
            if cnt_even >= odd_pos and cnt_odd >= even_pos:
                ans = (ans + fact[odd_pos] * fact[even_pos]) % MOD
        
        results.append(str(ans % MOD))
    
    print("\n".join(results))

if __name__ == "__main__":
    solve()