题意
T ( 1 ≤ T ≤ 1 0 3 ) T(1 \leq T \leq 10^3) T(1≤T≤103) 组数据:
对于每组数据定义
f
(
0
)
=
a
(
0
≤
a
≤
1
0
9
)
f(0) = a(0 \leq a \le 10^9)
f(0)=a(0≤a≤109)
f
(
1
)
=
b
(
0
≤
b
≤
1
0
9
)
f(1) = b(0 \leq b\le 10^9)
f(1)=b(0≤b≤109)
f
(
n
)
=
f
(
n
−
1
)
⨀
f
(
n
−
2
)
,
n
≥
2
f(n)=f(n−1)⨀f(n−2),n \ge 2
f(n)=f(n−1)⨀f(n−2),n≥2
求
F
(
n
)
,
(
0
≤
n
≤
1
0
9
)
F(n),(0 \leq n \le 10^9)
F(n),(0≤n≤109)
思路
前置知识:
a
⨀
a
=
0
(
1
)
a⨀a=0(1)
a⨀a=0(1)
a ⨀ b ⨀ c = a ⨀ c ⨀ b ( 2 ) a⨀b⨀c =a⨀c⨀b(2) a⨀b⨀c=a⨀c⨀b(2)
考虑 f ( 3 ) = f ( 2 ) ⨀ f ( 1 ) = a ⨀ b ⨀ a f(3) = f(2) ⨀f(1) = a ⨀ b ⨀ a f(3)=f(2)⨀f(1)=a⨀b⨀a,根据 ( 2 ) (2) (2) 得 f ( 3 ) = a ⨀ a ⨀ b f(3) = a ⨀ a ⨀ b f(3)=a⨀a⨀b,再根据 ( 1 ) (1) (1) 得 f ( 3 ) = 0 ⨀ b = b f(3) = 0 ⨀ b = b f(3)=0⨀b=b,同理 f ( 3 ) = a f(3) = a f(3)=a。
观察可以发现
f
(
n
)
=
a
,
n
m
o
d
3
=
0
f(n) = a,n \mod 3 = 0
f(n)=a,nmod3=0
f
(
n
)
=
b
,
n
m
o
d
3
=
1
f(n) = b,n \mod 3 = 1
f(n)=b,nmod3=1
f
(
n
)
=
a
⨀
b
,
n
m
o
d
3
=
2
f(n)=a⨀b,n \mod 3 = 2
f(n)=a⨀b,nmod3=2
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,a,b,c;
signed main() {
scanf("%lld",&t);
while(t--) {
scanf("%lld %lld %lld",&a,&b,&c);
if(c % 3 == 0) printf("%lld\n",a);
else if(c % 3 == 1) printf("%lld\n",b);
else printf("%lld\n",a^b);
}
}