AOJ_2149 Luck Manipulator
問題
略
解法
線形合同法を使って疑似乱数を実際に生成しシミュレーションするだけでいい。
実装
#include <cstdio> #include <algorithm> using namespace std; int A, B, C; int nX; const int MAX_N = 100; int N, num[MAX_N]; void rng(){ nX = ((A * nX) % C + B) % C; } int main(){ while(scanf("%d %d %d %d %d", &N, &A, &B, &C, &nX)){ if(N == A && A == B && B == C && C == nX && nX == 0) return 0; A = A % C; B = B % C; for(int i = 0; i < N; i++){ scanf("%d", &num[i]); } bool f = false; int cnt = 0; for(int i = 0; i <= 10000; i++){ if(num[cnt] == nX){ if(cnt == N - 1){ printf("%d\n", i); f = true; break; } cnt++; } rng(); } if(!f) printf("-1\n"); } return 0; }