码迷,mamicode.com
首页 > 其他好文 > 详细

长春理工大学第十四届程序设计竞赛(重现赛)F

时间:2019-06-09 09:54:44      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:运算   out   维护   add   ase   com   class   ace   msu   

F. Successione di Fixoracci

题目链接:https://ac.nowcoder.com/acm/contest/912/F

 

题目:

动态规划(Dynamic programming,简称dp)是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。例如,假设小x一步能爬1层或2层台阶,求小x爬n层台阶共有几种方法,就可以用dp计算:设Fi代表小x爬i层台阶共有几种方法,则Fi=Fi−1+Fi−2。

小x是练习时长两年半的acm练习生,喜欢口胡、dp、线段树。妙就妙在,不管是什么题目,无论多难,小x都能用他喜欢的三样东西AC。

你可能不相信,但其实他口胡了一个定理:所有题目,都可以转化成在x数列上的操作。只要先dp出题目对应的x数列,再用线段树随便维护一下,就可以过了。以下给出x数列的定义:

T0=a

T1=b

Tn=Tn−1⊕Tn−2(n≥2)

其中⊕为异或运算。

现在小x已经用dp求出了a和b的值。现在你只要求出Tn
是多少,就可以通过这道题目。
输入描述:

输入三个正整数a,b,n,含义见题目描述。

其中0≤a,b,n≤1018

输出描述:

输出一个整数Tn

,代表前两项为a,b的x数列在下标为n处的值。

示例1
输入
1 2 2
输出
3

思路

101  110 ——>011——>101——>110——>011......

会发现异或值出现了循环节3

多画几个就出来了

 

#include<bits/stdc++.h>
using namespace std;
typedef  long long ll;
int main()
{
 
    ll a,b,n;
    cin>>a>>b>>n;
    ll cc[10];
    cc[0]=a;
    cc[1]=b;
    cc[2]=a^b;
    cout<<cc[n%3]<<endl;
 
    return 0;
}

 

长春理工大学第十四届程序设计竞赛(重现赛)F

标签:运算   out   维护   add   ase   com   class   ace   msu   

原文地址:https://www.cnblogs.com/Vampire6/p/10992434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!