鏈接:https://ac.nowcoder.com/acm/contest/912/F
題意:
動態規劃(Dynamic programming,簡稱dp)是一種通過把原問題分解為相對簡單的子問題的方式求解復雜問題的方法。例如,假設小x一步能爬1層或2層臺階,求小x爬n層臺階共有幾種方法,就可以用dp計算:設FiFi代表小x爬i層臺階共有幾種方法,則Fi=Fi?1+Fi?2Fi=Fi?1+Fi?2。
小x是練習時長兩年半的acm練習生,喜歡口胡、dp、線段樹。妙就妙在,不管是什么題目,無論多難,小x都能用他喜歡的三樣東西AC。
你可能不相信,但其實他口胡了一個定理:所有題目,都可以轉化成在x數列上的操作。只要先dp出題目對應的x數列,再用線段樹隨便維護一下,就可以過了。以下給出x數列的定義:
T0=aT0=a
T1=bT1=b
Tn=Tn?1⊕Tn?2(n≥2)Tn=Tn?1⊕Tn?2(n≥2)
其中⊕⊕為異或運算。
現在小x已經用dp求出了a和b的值。現在你只要求出TnTn是多少,就可以通過這道題目
思路:
a xor b = c,a xor c = b, b xor c = a.
得到數列從0項開始是a,b,c循環。
代碼:
#include <bits/stdc++.h>using namespace std;typedef long long LL;int main()
{LL res[3];LL n;cin >> res[0] >> res[1] >> n;res[2] = res[0]^res[1];cout << res[n%3] << endl;return 0;
}