def permutacje(lista): wynik = [lista] for i in range(len(lista) - 1): lista = lista[1:] + [lista[0]] wynik.append(lista) return wynik def kongruencja_modulo(x): y = 1000000008 // x if (y * x) % 1000000007 == 1: return y else: return -(-1000000008 // x) def inwersje(lista): wynik = 0 for i in range(len(lista)): for j in range(1,len(lista)): if lista[i] > lista[j] and i < j: wynik += 1 return wynik def NWD(a, b): while b != 0: a, b = b, a % b return a def sprawdzanie_p_q(p,q): while NWD(p,q) != 1: x = NWD(p,q) p, q = p // x, q // x return p,q n = list(map(int, input("").split())) p = 0 q = 0 for i in range(n[1]): permu = permutacje(list(map(int, input("").split()))) q += len(permu) for j in permu: p += inwersje(j) p, q = sprawdzanie_p_q(p,q) z = kongruencja_modulo(q) * p print(z % 1000000007)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | def permutacje(lista): wynik = [lista] for i in range(len(lista) - 1): lista = lista[1:] + [lista[0]] wynik.append(lista) return wynik def kongruencja_modulo(x): y = 1000000008 // x if (y * x) % 1000000007 == 1: return y else: return -(-1000000008 // x) def inwersje(lista): wynik = 0 for i in range(len(lista)): for j in range(1,len(lista)): if lista[i] > lista[j] and i < j: wynik += 1 return wynik def NWD(a, b): while b != 0: a, b = b, a % b return a def sprawdzanie_p_q(p,q): while NWD(p,q) != 1: x = NWD(p,q) p, q = p // x, q // x return p,q n = list(map(int, input("").split())) p = 0 q = 0 for i in range(n[1]): permu = permutacje(list(map(int, input("").split()))) q += len(permu) for j in permu: p += inwersje(j) p, q = sprawdzanie_p_q(p,q) z = kongruencja_modulo(q) * p print(z % 1000000007) |