NOI 2012 난수 생 성기
11593 단어 2012
동 동 은 최근 랜 덤 알고리즘 에 빠 졌 고 랜 덤 생 성 은 랜 덤 알고리즘 의 기초 다.동 동 은 선형 동 여 법 을 사용 하여 무 작위 수열 을 만 들 려 고 한다. 이런 방법 은 네 개의 비 마이너스 매개 변수 m, a, c, X [0] 를 설정 하고 아래 의 공식 에 따라 일련의 무 작위 수 < X [n] >: X [n + 1] = (aX [n] + c) mod m 를 만들어 야 한다. 그 중에서 mod m 는 앞의 수 를 m 로 나 누 는 여 수 를 나타 낸다.이 식 에서 알 수 있 듯 이 이 서열 의 다음 수 는 항상 이전 수가 생 성 된다.
이런 방법 으로 생 성 된 서열 은 무 작위 서열 의 성질 을 가지 기 때문에 이런 방법 은 광범 위 하 게 사용 되 고 있다. 자주 사용 하 는 C + + 와 Pascal 의 무 작위 수 를 생 성 하 는 라 이브 러 리 함 수 를 포함 하여 사용 하 는 것 도 이런 방법 이다. 동 동 은 이렇게 발생 하 는 서열 이 좋 은 임 의 성 을 가지 고 있다 는 것 을 알 지만 마음 이 급 한 그 는 X [n] 가 얼마 인지 빨리 알 고 싶 어 한다.동 에 필요 한 임 의 수 는 0, 1, g - 1 사이 이기 때문에 그 는 X [n] 를 g 으로 나 누 어 원 하 는 수 를 얻 어야 한다. 즉, X [n] mod g 이다. 동 에 게 그 가 원 하 는 수 X [n] mod g 가 얼마 인지 만 알려 주면 된다.
격식.
입력 형식
빈 칸 으로 나 누 는 정수 m, a, c, X0, n 과 g 6 개 를 포함 합 니 다. 그 중에서 a, c, X0 은 비 마이너스 정수, m, n, g 는 정수 입 니 다.
출력 형식
Xn mod g 를 출력 합 니 다.
샘플 1
샘플 입력 1 [복사]
11 8 7 1 5 3
샘플 출력 1 [복사]
2
제한 하 다.
각 테스트 포인트 1s
제시 하 다.
1: n < = 100, m, a, c, X 0 < = 100 m 는 질 수 2: n < = 1000, m, a, c, X 0 < = 1000 m 는 질 수 3: n < = 10 ^ 4, m, a, c, c, X 0 < = 10 ^ 4m 는 질 수 4: n < = 10 ^ 4, m, a, c, X 0 < = 10 ^ 4 m 는 질 수 5: n < = 10 ^ 5, m, a, a, c, a, c, c, X 0, a, c, X 0 < = 10, a, c, X 0 < = 10 ^ 4 m 와 a - 1 의 이질 6: n < 10 ^ 4 m = 10 ^ 5, m, m, m, a, a, a, c, c, c, X 0 < 10 ^ 4 m 는 질 수 5: n < = 10 ^ 5, 질 7: n < = 10 ^ 5, m, a, c, X0 < = 10 ^ 4 m 와 a - 1 의 상호 질 8: n < = 10 ^ 6, m, a, c, X0 < = 10 ^ 49: n < = 10 ^ 6, m, a, c, X0 < = 10 ^ 9 m 는 질 수 10: n < = 10 ^ 6, m, a, c,X 0 < = 10 ^ 911: n < = 10 ^ 12, m, a, c, X 0 < = 10 ^ 9 m 는 질 수 12: n < = 10 ^ 9 m 은 질 수 12: n < = 10 ^ 12, m, a, c, c, X 0 < = 10 ^ 9 m 는 질 수 13: n < 10 ^ 16, m, a, c, X 0 < = 10 ^ 9 m 와 a - 1 의 호 질 14 n < = 10 ^ 16, m, a, a, c, c, X 0 < = 10 ^ 9 m 와 a - 1 의 호 질 15: n < 10 ^ 16, m, m, a, a, a, m, m, a - 1 과 a - 1 의 10 ^ 16, m, m, a, a, a, c, m, m, m, m, a, a - 1 의 호 질 15: n < 10 = 10 ^ 917: n < = 10 ^ 18, m, a, c, X0 < = 10 ^ 918: n < = 10 ^ 18, m, a, c, X0 < = 10 ^ 18 m 는 질 수 19: n < = 10 ^ 18, m, a, c, X0 < = 10 ^ 18 m 와 a - 1 의 상호 질 20: n < = 10 ^ 18, m, a, c,X0<=10^18
기본 사고방식: 매트릭스 + 스피드 幂
이 문 제 는 공식 이 있 는 것 같 지만 인터넷 에 서 는 아무 도 말 하지 않 는 것 같다. 쾌속 멱 의 사상 은 행렬 과 결합 해 야 할 뿐만 아니 라 곱셈 도 필요 하 다.롱 롱 이 직접 곱 하면 폭발 하기 때문에 곱 하기 플러스 로 해 야 합 니 다.
매트릭스 구축
1 #include <iostream>
2 #include <algorithm>
3 #include <cstring>
4
5 using namespace std ;
6
7 #define ll long long
8
9 ll m , a , c , n , g , x ;
10
11 ll multi( ll y , ll cnt ) {
12 if ( ! cnt ) return 0 ;
13 if ( cnt == 1 ) return y % m ;
14 ll rec = multi( y , cnt / 2 ) ;
15 rec = ( rec + rec ) % m ;
16 if ( cnt % 2 ) rec = ( rec + y ) % m ;
17 return rec ;
18 }
19
20 struct maxtrix {
21 ll a[ 2 ][ 2 ] ;
22 maxtrix( ) {
23 memset( a , 0 , sizeof( a ) ) ;
24 }
25 void print( ) {
26 for ( int i = 0 ; i < 2 ; i ++ ) {
27 for ( int j = 0 ; j < 2 ; j ++ ) {
28 cout << a[ i ][ j ] << " " ;
29 }
30 cout << endl ;
31 }
32 }
33 };
34
35 maxtrix Multi( maxtrix m1 , maxtrix m2 ) {
36 maxtrix rec ;
37 for ( int i = 0 ; i < 2 ; i ++ ) {
38 for ( int j = 0 ; j < 2 ; j ++ ) {
39 for ( int k = 0 ; k < 2 ; k ++ ) {
40 rec.a[ i ][ j ] += multi( m1.a[ i ][ k ] , m2.a[ k ][ j ] ) ;
41 rec.a[ i ][ j ] %= m ;
42 }
43 }
44 }
45 return rec ;
46 }
47
48 maxtrix Pow( maxtrix x , ll cnt ) {
49 if ( cnt == 1 ) return x ;
50 maxtrix rec = Pow( x , cnt / 2 ) ;
51 rec = Multi( rec , rec ) ;
52 if ( cnt % 2 ) rec = Multi( rec , x ) ;
53 return rec ;
54 }
55
56 int main( ) {
57 cin >> m >> a >> c >> x >> n >> g ;
58 maxtrix m1 , m2 ;
59 m2.a[ 0 ][ 0 ] = a , m2.a[ 0 ][ 1 ] = 0 , m2.a[ 1 ][ 0 ] = c , m2.a[ 1 ][ 1 ] = 1 ;
60 m1.a[ 0 ][ 0 ] = x , m1.a[ 0 ][ 1 ] = 1 ;
61 maxtrix ans = Multi( m1 , Pow( m2 , n ) ) ;
62 cout << ans.a[ 0 ][ 0 ] % g << endl ;
63 return 0 ;
64 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
문제의 진정한 원인 찾기: 20121021 서버 장애 처리 경험(당초 성능을 고려하여tempdb 데이터베이스 파일을 비RAID5의 독립 하드디스크에 놓았습니다.) 파일이 존재했지만 갑자기 이 하드디스크에 다른 폴더가 많이 보이지 않는 것을 발견했습니다.RAID5가 아닌 이 독립...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.