• NOI2011 Day1


    NOI2011 Day1

    兔农

    题目描述(fib[1]=fib[2]=1, fib[i]=fib[i-2]+fib[i-1] (igeq 3)),若(fib[i] equiv 1(mod k)(i geq 3)),则(fib[i]=fib[i]-1),已知(k, P),求(fib[n] mod P)

    solution
    先看一下当(k=7)时,(fib[i] mod k):(每行的最后一个数变为0)

    1, 1, 2, 3, 5, 1
    5, 5, 3, 1
    3, 3, 6, 2, 1
    2, 2, 4, 6, 3, 2, 5, 0, 5, 5, 3, 1
    3, 3, 6, 2, 1
    ……
    

    出现循环了,也就是说这是有循环节的,而且每一行都是一个斐波那契数列,由于每行的最后一个数为(0),下一行的第一个数变成了该行的倒数第二个数,下一行的第二个数与第一个数相同,构成新的斐波那契数列的首两项。
    设每行首项为(X),每一项除以(X),就是原来的斐波那契数列。
    (X*fib[i] equiv 1 (mod k))成立的最小的(i)记为(Len[X]),这就是以(X)为首项的长度,如果(Len[x])不存在,则说明以后都不会再减一,之后就按照斐波那契数列去做就好了。
    (Len[X]),就要求(X)的逆元,因为(k)不一定是质数,只好用扩展欧几里得求出(fib[Len[X]]),从而求出(Len[x])
    计算斐波那契数列时用到矩阵乘法,自己构造一下就好了。
    这题的可行性在于一个结论:模(k)意义下的斐波那契数列的循环节(leq 6k)

    时间复杂度:(O(6k))

    智能车比赛

    题目描述:给出(n)个矩形,第(i)个矩形区域的左下角和右上角坐标分别为((x_{i,1},y_{i,1}))((x_{i,2},y_{i,2})), 保证(x_{i,1}<x_{i,2}=x_{i+1,1},y_{i,1}<y_{i,2}),给出起点坐标与终点坐标,只能在矩形内行走,问起点到终点的最短路径。

    solution
    只有相邻两个矩形的重边的端点是有用的,然后(n^2)连边,最短路。

    时间复杂度:因算法而异

    阿狸的打字机

    题目描述:给出一串操作,包含小写字母或('B','P'),小写字母表示在字符串末尾添加该字母(字符串一开始为空),('B')为删去最后一个字母,('P')为输出当前字符串。有若干个询问((x, y)),问第(y)个输出的字符串包含多少个第(x)个输出的字符串。

    solution
    容易想到AC自动机+fail-tree,然后把询问离线读入,按(y)从小到大排序。在fail-tree中,任意一个点的子树的字符串都包含该点所对应的字符串。
    按照操作顺序模拟,将(y)到根的点(+1)AC自动机),查找(x)的子树的和(fail-tree)即为答案。

    时间复杂度:(O(nlogn))

  • 相关阅读:
    MongoDB,无模式文档型数据库简介
    数据说话:怎样的程序员最抢手?
    猛醒:也许我们一生追求的都错了!
    中国风电生产监控平台界面
    如何跟着趋势去赚钱
    2015年最好的员工心态培养 -- 我们需要把简单的事情做到极致
    什么是程序员的核心竞争力?
    第一篇 技术选型
    .net core 读取配置文件
    .net core nlog记录日志
  • 原文地址:https://www.cnblogs.com/GerynOhenz/p/4709322.html
Copyright © 2020-2023  润新知