君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Croc Champ 2012 - Round 1

はい。
http://codeforces.com/contest/173

A. Rock-Paper-Scissors

ざっくりと大意

・じゃんけんでNikephorosが上の行の手、Polycarpusが下の行の手を出す
・n回ジャンケンするので手を使い切ったらまた先頭からループ
・それぞれの勝利数を半角スペース開けて一行で出力

方針のようなもの

・ゲーム数が多くなると時間が全然足りなくなる ・なので互いの手数の最小公倍数のゲーム数が終わるとお互いにまた一手目からになるのを利用してその分は計算を省略させる

n=int(raw_input())
Nike=list(raw_input())
Poly=list(raw_input())
a,b=max(len(Nike),len(Poly)),min(len(Nike),len(Poly))


def gcd(a,b):
    while a%b:
        a,b=b,a%b
    return b

def lcm(a,b):
    return a*b/gcd(a,b)

chk=lcm(a,b)


def play(m,Nike,Poly):
    ni=po=0
    for i in range(m):
        if Nike[i%len(Nike)]=='R' and Poly[i%len(Poly)]=='S':
            po+=1
        elif Nike[i%len(Nike)]=='R' and Poly[i%len(Poly)]=='P':
            ni+=1
        elif Nike[i%len(Nike)]=='S' and Poly[i%len(Poly)]=='R':
            ni+=1
        elif Nike[i%len(Nike)]=='S' and Poly[i%len(Poly)]=='P':
            po+=1
        elif Nike[i%len(Nike)]=='P' and Poly[i%len(Poly)]=='S':
            ni+=1
        elif Nike[i%len(Nike)]=='P' and Poly[i%len(Poly)]=='R':
            po+=1
    return ni,po



if n<=chk:
    ans=play(n,Nike,Poly)
    print ans[0],ans[1]
else:
    t=n/chk
    k=n%chk
    ta=play(chk,Nike,Poly)
    ka=play(k,Nike,Poly)
    print (ta[0]*t)+ka[0],(ta[1]*t)+ka[1]