Problem:


Problem A: Luck Manipulator

Nathan O. Davis くんは，あるゲームを攻略中であり，非常にレアなアイテムを手に入れようと四苦八苦していた．このレアなアイテムは，カジノのスロットマシーンで特殊な絵柄を一列に揃えたときに手に入れることができる．スロットマシーンには N 個のリールがあり，ボタンを一回押すと現在回転している最も左側のリールが停止する．そのため，このレアアイテムを手に入れるためには N 回ボタンを押す必要がある．また，特殊な絵柄で停止させるためにはあるタイミングでボタンを押す必要がある．ところが，このボタンを押すタイミングは非常にシビアであるため，なかなか上手くいかずに困っていた．そこで，Nathan くんはメモリビューアを利用して，ゲーム中におけるメモリの値を確認しながらゲームを解析することにした．

Nathan くんの解析の結果，その特殊な絵柄でリールを停止させるためには，ボタンが押された時に，メモリの 007E0D1F 番地に書き込まれた「乱数」が特定の値になっている必要があることを突き止めた．乱数の値は 1 フレーム毎に線形合同法によって変化しており，またボタンが押されたかどうかの判定は 1 フレーム毎に 1 回行われていることも分かった．ここで，線形合同法とは擬似乱数を生成するための方法の一つであり，以下の式によって値を決定する．

x' = (A &times; x + B) mod C

ここで，x は現在の乱数の値，x' は次の乱数の値，A, B, C は何らかの定数である．また，y mod z は y を z で割ったときの余りを表す．

例えば，2 個のリールを持つスロットマシーンで A = 5，B = 7，C = 11 で，最初の「乱数」の値が 10 であったとする．そして，特殊な絵柄でリールを止めるための条件は，左側のリールが 2，右側のリールが 4 であったとする．このとき，1 フレーム目における乱数の値は (5 &times; 10 + 7) mod 11 = 2 であるため，1 フレーム目にボタンを押せば左側のリールは特殊な絵柄で停止する．続く 2 フレーム目での乱数の値は (5 &times; 2 + 7) mod 11 = 6 であるから，2 フレーム目にボタンを押しても右側のリールは特殊な絵柄では停止しない．続く 3 フレーム目では乱数の値が (5 &times; 6 + 7 ) mod 11 = 4 になるので，3 フレーム目にボタンを押せば右側のリールは特殊な絵柄で停止する．よって，最短 3 フレームで全てのリールを特殊な絵柄で停止されることができ，レアなアイテムを手に入れることができる．

あなたの仕事は，最短で何フレーム目に全てのリールを特殊な絵柄で停止させることができるかを求めるプログラムを書いて，Nathan くんがレアなアイテムを手に入れられるよう助けてあげることである．

Input

入力は複数のデータセットからなる．各データセットは次の形式で与えられる．

N A B C X

Y1 Y2 ... YN

最初の行には 5 つの整数 N (1 ≤ N ≤ 100) ，A, B (0 ≤ A, B ≤ 10,000)，C (1 ≤ C ≤ 10,000) ，X (0 ≤ X < C) がそれぞれ 1 つの空白文字で区切られて与えられる．ここで，X は最初の乱数の値を表す．続く行では，N 個の整数 Y1, Y2, ... , YN (0 ≤ Yi ≤ 10,000) が 1 つの空白文字で区切られて与えられる．これらは，リールを特定の絵柄で止めるための条件を表しており，その第 i 番目の数 Yi は，左から i 番目のリールを特殊な絵柄で停止するためには，乱数の値が Yi である必要がある，いう意味である．

入力の終わりは，空白で区切られた 5 つの 0 を含む 1 行で示される．

Output

各データセットについて，特殊な絵柄で停止させるために必要となる最短のフレーム数を 1 行に出力せよ．なお，10,000 フレーム以内に停止させることができない場合は，フレーム数の代わりに -1 を出力せよ．出力に余計な空白や改行を含めてはならない．

Sample Input

1 5 7 11 10
10
2 5 7 11 10
2 4
2 1 1 256 0
128 255
2 0 0 1 0
1234 5678
2 1 1 100 0
99 98
2 1 1 100 0
99 99
2 1 1 10000 0
1 0
2 1 1 10000 0
2 1
0 0 0 0 0

Output for the Sample Input

0
3
255
-1
198
199
10000
-1



Sample input:
1 5 7 11 10
10
2 5 7 11 10
2 4
2 1 1 256 0
128 255
2 0 0 1 0
1234 5678
2 1 1 100 0
99 98
2 1 1 100 0
99 99
2 1 1 10000 0
1 0
2 1 1 10000 0
2 1
0 0 0 0 0


Sample output:
0
3
255
-1
198
199
10000
-1

Submission status: Accepted

Solution code:
while True:
    data = input().split()
    n,a,b,c,x = int(data[0]),int(data[1]),int(data[2]),int(data[3]),int(data[4])
    if n == 0 and a == 0 and b == 0 and c == 0 and x == 0: break
    yList = input().split()
    frames = []
    bRand = x
    for i in range(0,10001):
        frames.append(bRand)
        bRand = (a * bRand + b)%c
    yCount = 0
    frameCount = -1
    for i,rand in enumerate(frames):
        if int(yList[yCount]) == rand:
            yCount += 1
            if yCount == len(yList):
                frameCount = i
                break
    print(frameCount)

Submission status: Accepted

Solution code:
from collections import deque
while 1:
    n,a,b,c,x = map(int,input().split())
    if n == 0 and a == 0 and b == 0 and c == 0 and x == 0:
        break
    y = list(map(int,input().split()))
    flame = 0
    ind = 0
    for i in range(10000+1):
        if x == y[ind]:
            ind += 1
        if ind == n:
            break
        flame += 1
        x = (a*x+b) % c 
    if ind == n:
        print(flame)
    else:
        print(-1)

Submission status: Accepted

Solution code:
class SlotMachine:
    def __init__(self, reel_num, A, B, C):
        self.reel_num = reel_num
        self.A = A
        self.B = B
        self.C = C
    def calculate_random_num(self, random_num):
        random_num = (self.A * random_num + self.B) % self.C
        # print("random_num", random_num) # debug
        return random_num

    def count_flame(self, condition_list, random_num) :
        flame_num = 0
        order = 0
        while order < len(condition_list):
            order, flame_num, random_num = self.check_condition(condition_list, random_num, order, flame_num)
            if flame_num > 10001:
                flame_num = -1
                return flame_num
        return flame_num - 1

    def check_condition(self, condition_list, random_num, order, flame_num):
        if random_num == condition_list[order]:
            order += 1
        random_num = self.calculate_random_num(random_num)
        flame_num += 1
        # print("flame_num", flame_num) # debug
        return order, flame_num, random_num




def get_data_list():
    data_list = input().split()
    for i in range(len(data_list)):
        data_list[i] = int(data_list[i])
    return data_list


if __name__ == "__main__":
    while True:
        data_list = get_data_list()
        # print("data_list", data_list) # debug
        reel_num = data_list[0]
        A = data_list[1]
        B = data_list[2]
        C = data_list[3]
        first_num = data_list[4]
        if reel_num == 0:
            break
        condition_list = get_data_list()
        slot_machine = SlotMachine(reel_num, A, B, C)
        flame_num = slot_machine.count_flame(condition_list, first_num)
        # print("ans", flame_num) # debug
        print(flame_num)

Submission status: Accepted

Solution code:
# -*- coding: utf-8 -*-

while(True):
	N,A,B,C,X = map(int, input().split())
	if (N==0&A==0&B==0&C==0&X==0):break
	y = list(int(i) for i in input().split())  
	frame = 0
	reel = 0
	while(True):
		if(frame ==10001):
			frame = -1
			break
		if y[reel] == X:
			reel += 1

		if reel == N:
			break
		X = (A * X + B)%C
		frame += 1

	print(frame)

Submission status: Accepted

Solution code:
while True:
  N,A,B,C,X=map(int,input().split())
  if N==0 and A==0 and B==0 and C==0 and X==0:
    break
  Y=list(map(int,input().split()))
  count=0
  real=0
  j=0
  while True:
    if X==Y[j]:
      count+=1
      j+=1
    if count==int(len(Y)):
      break
    if real>=10000:
      real=-1
      break
    X=(A*X+B)%C
    real+=1
  print(real)

Submission status: Accepted

Solution code:
#  x' = ( A * x + B) mod C
def random(a,b,c,x):
    li = [x]
    for i in range(100000):
        x = (a * x + b) % c
        li.append(x)
    return li

while True:
    n,a,b,c,x = [int(i) for i in input().split()]
    if n == a == b == c == x == 0: 
        break

    y_lis = [int(y) for y in input().split()]
    x_lis = random(a,b,c,x)
    f = 0
    r = 0
    if set(y_lis) & set(x_lis) == set():
        print(-1)
    else:
        while f <= 10000:
            if x_lis[f] == y_lis[r]:
                r += 1
            if r == n:
                break
            f += 1
        if r == n:
            print(f)
        else:
            print(-1)

Submission status: Accepted

Solution code:
def Next(x) :
	return (A * x + B) % C

while True :
	N, A, B, C, X = map(int, input().split())
	if(C == 0) :
		break
	else :
		Y = list(map(int,input().split()))
		for i in range(10002) :
			if(i == 10001) :
				print(-1)
			else :
				if(X == Y[0]) :
					del Y[0]
				if(len(Y) == 0) :
					print(i)
					break
				else :
					X = Next(X)

Submission status: Accepted

Solution code:
while True:
  n, a, b, c, x = list(map(int, input().split()))
  if n==0:
    break

  y = list(map(int, input().split()))
  cnt = 0
  cur = 0
  while cnt<=10000:
    if x==y[cur]:
      cur += 1
    if cur==n:
      break
    x = (a*x+b)%c
    cnt += 1
  if cnt==10001:
    print(-1)
  else:
    print(cnt)

Submission status: Accepted

Solution code:
def main():
    while True:
        n,a,b,c,x = map(int,input().split())
        if (n,a,b,c,x) == (0,0,0,0,0):
            return
        yy = list(map(int,input().split()))
        yi = 0
        for i in range(10002):
            if yi == len(yy):
                print(i-1)
                break
            elif i > 10000:
                print(-1)
                break
            if x == yy[yi]:
                yi += 1
            x = (a * x + b) % c

if __name__ == '__main__':
    main()

Submission status: Accepted

Solution code:
from collections import deque
while 1:
    n,a,b,c,x=map(int,input().split())
    if n==a==b==c==x==0:break
    y=list(map(int,input().split()))
    y_q=deque(y)
    t=0
    while t<10001:
        if x==y_q[0]:y_q.popleft()
        if len(y_q)==0:break
        t+=1
        x=(a*x+b)%c
    if t>10000:print(-1)
    else:print(t)

Submission status: Accepted

Solution code:
while 1:
    n, a, b, c, x = map(int, input().split())
    if n == 0:
        break

    target = list(map(int, input().split()))
    if x == target[0]:
        target.pop(0)
    if target == []:
        print(0)
        continue

    for i in range(10000):
        x = (a * x + b) % c
        if x == target[0]:
            target.pop(0)
            if target == []:
                print(i+1)
                break
    else:
        print(-1)

Submission status: Accepted

Solution code:
for e in iter(input, '0 0 0 0 0'):
    N, A, B, C, X = map(int, e.split())
    Y = [*map(int, input().split())]
    lenY = len(Y)
    tgt = Y[0] == X
    cnt = 0
    while tgt < lenY and cnt < 10000:
        cnt += 1
        X = (A * X + B) % C
        tgt += Y[tgt] == X
    print(cnt if tgt == lenY else -1)

Submission status: Accepted

Solution code:
# coding: utf-8
def nextX(x,a,b,c):
        return (a*x+b)%c
        
while 1:
    n,a,b,c,x=map(int,input().split())
    if n==0:
        break
    data=list(map(int,input().split()))
    for i in range(0,10001):
        if data[0]==x:
            del data[0]
        if(len(data)==0):
            print(i)
            break
        x=nextX(x,a,b,c)
    else:
        print(-1)

Submission status: Accepted

Solution code:
def solve(A, B, C, X, Y):
    i = 0
    k = 0
    v = X

    while i <= 10000:
        if v == Y[k]:
            k += 1
        if k == len(Y):
            return i
        v = (v*A + B) % C
        i += 1

    return -1

while True:
    N, A, B, C, X = map(int, raw_input().split(" "))
    if (N, A, B, C, X) == (0, 0, 0, 0, 0):
        break
    Y = map(int, raw_input().split(" "))

    print solve(A, B, C, X, Y)

Submission status: Runtime Error

Solution code:
fvasg

Submission status: Runtime Error

Solution code:
while True:
  N,A,B,C,X = map(int,raw_input().split())
  if N == A == B == C == X == 0:break
  sum = 0
  Z = 0
  Y = [int(x) for x in raw_input().split()]
  if (X in Y) == True:
      Y.remove(X)
  while Z == 0:
      if sum == 10000:
          sum = -2
          Z = 1
      sum += 1
      X = (A*X+B)%C
      if X == Y[0]:
          Y.pop(0)
          if len(Y) == 0:
              Z = 1
  print sum

Submission status: Runtime Error

Solution code:
while 1:
  N,A,B,C,X = map(int,raw_input().split())
  if N == A == B == C == X == 0:break
  sum = 0
  Z = 0
  Y = [int(x) for x in raw_input().split()]
  if (X in Y) == True:
      Y.remove(X)
  while Z == 0:
      if sum == 10000:
          sum = -2
          Z = 1
      sum += 1
      X = (A*X+B)%C
      if X == Y[0]:
          Y.pop(0)
          if len(Y) == 0:
              Z = 1
  print sum

Submission status: Runtime Error

Solution code:
N,A,B,C,X = map(int,raw_input().split())
if N == A == B == C == X == 0:break
sum = 0
Z = 0
Y = [int(x) for x in raw_input().split()]
if (X in Y) == True:
    Y.remove(X)
while Z == 0:
    if sum == 10000:
        sum = -2
        Z = 1
    sum += 1
    X = (A*X+B)%C
    if X == Y[0]:
        Y.pop(0)
        if len(Y) == 0:
            Z = 1
print sum

Submission status: Runtime Error

Solution code:
while True:
    a = input()
    a = a.split(" ")
    b = []
    for i in a:
        b.append(int(i))
    if b[0] == 0 and b[1] == 0 and b[2] == 0 and b[3] == 0 and b[4] == 0:
        break
    c = input()
    c = c.split(" ")
    d = []
    for i in c:
        d.append(int(i))
    if b[4] == d[0]:
        print(0)
        continue
    ans = 2
    for i in d:
        for e in range(10000):
            x = (b[1] * b[4] + b[2]) % b[3]
            if x == i:
                b[4] = x
                break
            b[4] = x
            ans = ans + 1
    if ans >= 10001:
        ans = -1
    print(ans)

Submission status: Runtime Error

Solution code:
while True:
    a = input()
    a = a.split(" ")
    b = []
    for i in a:
        b.append(int(i))
    if b[0] == 0 and b[1] == 0 and b[2] == 0 and b[3] == 0 and b[4] == 0:
        break
    c = input()
    c = c.split(" ")
    d = []
    for i in c:
        d.append(int(i))
    if b[4] == d[0]:
        print(0)
        continue
    ans = 2
    for i in d:
        for e in range(10000):
            x = (b[1] * b[4] + b[2]) % b[3]
            if x == i:
                b[4] = x
                break
            b[4] = x
            ans = ans + 1
    if ans >= 10001:
        ans = -1
    print(ans)

Submission status: Runtime Error

Solution code:
while True:
    a = input()
    if a == "0 0 0 0 0":
        break
    a = a.split(" ")
    b = []
    for i in a:
        b.append(int(i))
    c = input()
    c = c.split(" ")
    d = []
    for i in c:
        d.append(int(i))
    if b[4] == d[0]:
        print(0)
        continue
    ans = 0
    x = b[4]
    for i in d:
        for e in range(10000):
            x = (b[1] * x + b[2]) % b[3]
            ans = ans + 1
            if x == i:
                break
    if ans >= 10001:
        ans = -1
    print(ans)

Submission status: Runtime Error

Solution code:
while True:
    a = input()
    if a == "0 0 0 0 0":
        break
    a = a.split(" ")
    b = []
    for i in a:
        b.append(int(i))
    c = input()
    c = c.split(" ")
    d = []
    for i in c:
        d.append(int(i))
    if b[4] == d[0]:
        print(0)
        continue
    ans = 0
    x = b[4]
    for i in d:
        for e in range(10001):
            x = (b[1] * x + b[2]) % b[3]
            ans = ans + 1
            if x == i:
                break
    if ans >= 10001:
        ans = -1
    print(ans)

Submission status: Runtime Error

Solution code:
while True:
    a = input()
    # if a == "0 0 0 0 0":
    #     break
    a = a.split(" ")
    b = []
    sum = 0
    for i in a:
        b.append(int(i))
        sum += int(i)
    print(sum)
    if sum == 0:
        break
    c = input()
    c = c.split(" ")
    d = []
    for i in c:
        d.append(int(i))
    if b[4] == d[0]:
        print(0)
        continue
    ans = 0
    x = b[4]
    for i in d:
        for e in range(10001):
            x = (b[1] * x + b[2]) % b[3]
            ans = ans + 1
            if x == i:
                break
    if ans >= 10001:
        ans = -1
    print(ans)

Submission status: Runtime Error

Solution code:
while True:

    a = input()
    # if a == "0 0 0 0 0":
    #     break
    a = a.split(" ")
    b = []
    sum = 0
    for i in a:
        b.append(int(i))
        sum += int(i)
    if sum == 0:
        break
    c = input()
    c = c.split(" ")
    d = []
    for i in c:
        d.append(int(i))
    if b[4] == d[0]:
        print(0)
        continue
    ans = 0
    x = b[4]
    for i in d:
        for e in range(10001):
            x = (b[1] * x + b[2]) % b[3]
            print("x: " ,x)
            ans = ans + 1
            if x == i:
                break
    if ans >= 10001:
        ans = -1
    print(ans)

quit()

Submission status: Runtime Error

Solution code:
f=lambda A,x,B,C:(A*x+B)%C
while 1:
    N,A,B,C,X=map(int,raw_input().split())
    if not N and not A and not B and not C and not X:break
    Y=list(map(int,raw_input().split()))
    T=X
    c=[[] for _ in range(N)]

    sl=0
    for i in range(10005):
        if T==Y[sl]:
            sl+=1
            if sl==N:break
        T=f(A,T,B,C)
    if i>10000:i=-1
    print(i)

Submission status: Runtime Error

Solution code:
null