読者です 読者をやめる 読者になる 読者になる

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

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

Codeforces Round #383 (Div.2)

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

A. Arpa’s hard exam and Mehrdad’s naive cheat

ざっくりと大意

・1378のn乗の数の下一桁は何か。

Python2

n=int(raw_input())
print [6,8,4,2][n%4] if n!=0 else 1

0だけ例外で後は4増えるごとに周期性があるのでそれを利用する。TLではpowを利用する派が多かった。なぜだ。。

B. Arpa’s obvious problem and Mehrdad’s terrible solution

ざっくりと大意

・要素数n個の数列aの中からxorして結果がxになるようなペアを数える。

Python2

n,x=map(int,raw_input().split())
l=map(int,raw_input().split())
ans=chk=0
d={}
for i in l:
    if i in d:
        d[i]+=1
    else:
        d[i]=1
if x==0:
    for i in d:
        ans +=d[i]*(d[i]-1)/2
    print ans
else:
    for i in d:
        if i^x in d:
            ans+=d[i]*d[i^x]
    print ans/2

結果がxになるようなペアはi ^ j = xになるようなペアはi ^ x = jでもある特徴を利用する。そうすれば総当りでペアが成立するかを調べずにペア成立を数えられる。 xが0の場合は同じ数とのペアとなるのでnC2を計算する。 0以外ならばそれぞれの同じ数の個数の積がペアの成立数になる。但し、2重で数えていることになるので最後に2で割る。