Logo
(追記) (追記ここまで)

18872번 - Exercise 다국어

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 512 MB54181637.209%

문제

Farmer John has come up with a new morning exercise routine for the cows (again)!

As before, Farmer John's $N$ cows (1ドル\le N\le 7500$) are standing in a line. The $i$-th cow from the left has label $i$ for each 1ドル\le i\le N$. He tells them to repeat the following step until the cows are in the same order as when they started.

  • Given a permutation $A$ of length $N,ドル the cows change their order such that the $i$-th cow from the left before the change is $A_i$-th from the left after the change.

For example, if $A=(1,2,3,4,5)$ then the cows perform one step and immediately return to the same order. If $A=(2,3,1,5,4),ドル then the cows perform six steps before returning to the original order. The order of the cows from left to right after each step is as follows:

  • 0 steps: $(1,2,3,4,5)$
  • 1 step: $(3,1,2,5,4)$
  • 2 steps: $(2,3,1,4,5)$
  • 3 steps: $(1,2,3,5,4)$
  • 4 steps: $(3,1,2,4,5)$
  • 5 steps: $(2,3,1,5,4)$
  • 6 steps: $(1,2,3,4,5)$

Compute the product of the numbers of steps needed over all $N!$ possible permutations $A$ of length $N$.

As this number may be very large, output the answer modulo $M$ (10ドル^8\le M\le 10^9+7,ドル $M$ is prime).

Contestants using C++ may find the following code from KACTL helpful. Known as the Barrett reduction, it allows you to compute $a \% b$ several times faster than usual, where $b>1$ is constant but not known at compile time. (we are not aware of such an optimization for Java, unfortunately).

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef __uint128_t L;
struct FastMod {
	ull b, m;
	FastMod(ull b) : b(b), m(ull((L(1) << 64) / b)) {}
	ull reduce(ull a) {
		ull q = (ull)((L(m) * a) >> 64);
		ull r = a - q * b; // can be proven that 0 <= r < 2*b
		return r >= b ? r - b : r;
	}
};
FastMod F(2);
int main() {
	int M = 1000000007; F = FastMod(M);
	ull x = 10ULL*M+3; 
	cout << x << " " << F.reduce(x) << "\n"; // 10000000073 3
}

입력

The first line contains $N$ and $M$.

출력

A single integer.

제한

예제 입력 1

5 1000000007

예제 출력 1

369329541

힌트

For each 1ドル\le i\le N,ドル the $i$-th element of the following array is the number of permutations that cause the cows to take $i$ steps: $[1,25,20,30,24,20].$ The answer is 1ドル^1\cdot 2^{25}\cdot 3^{20}\cdot 4^{30}\cdot 5^{24}\cdot 6^{20}\equiv 369329541\pmod{10^9+7}$.

출처

Olympiad > USA Computing Olympiad > 2019-2020 Season > USACO 2020 US Open Contest > Platinum 2번

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /