zoukankan      html  css  js  c++  java
  • 长春理工大学第十四届程序设计竞赛(重现赛)F.Successione di Fixoracci

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

    题意:

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


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


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

    T0=aT0=a

    T1=bT1=b

    Tn=Tn1Tn2(n2)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;
    }
    

      

  • 相关阅读:
    webpack-bundle-analyzer使用
    HTTP1.0,HTTP1.1和HTTP2.0区别
    document.readyState
    async和defer
    页面生命周期
    key的理解
    解释型语言和编译型语言
    AMD/CMD/CommonJS与ES6 Module的区别
    vue的keep-alive原理
    数字钱包metaplex-foundation
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10992179.html
Copyright © 2011-2022 走看看