zoukankan      html  css  js  c++  java
  • ZROI普转提10.13

    ZROI普转提10.13

    不爽,连掉两场了...


    还是我太菜了啊...

    A.控制人偶

    (SB)题,如果 (Tle n) 就直接暴力跑 (nle 5000).
    否则,就把一整个命令串压成一个矢量,从起点 ((0,0))(T/n) 次.
    以这个终点作为起点再暴力跑即可.

    B.复杂度计算

    直接贴代码能有 (20pts).
    然后,通过阅读代码,我们发现这是统计所有子矩阵的 (size) 之和.
    考虑,一个点会产生多少贡献,即它会被包含在多少个子矩阵中.
    令该点为 ((x,y)) ,那么显然,包含它的子矩阵的左上角一定在 ((1,1))((x,y)) 之间,右下角一定在 ((x,y))((n,m)) 之间.
    而这两个矩阵的 (size) 是可以 (Theta(1)) 计算的.
    所以,只需要枚举每个点,统计其贡献即可,贡献显然为两个矩阵的 (size) 的乘积.
    总复杂度 (Theta(n^2)).
    然而这远远不足以通过本题.
    通过打表可以得到这个东西:

    1    4    10   20   35  
    4    16   40   80   140 
    10   40   100  200  350 
    20   80   200  400  700 
    35   140  350  700  1225
    

    你惊奇地发现,如果把第一行或者第一列拿出来作为数列 (v_i).
    那么令 (f(i,j)) 表示 (n=i,m=j) 时的答案,会有 (f(i,j)=v_i imes v_j).

    那么如果我们能找出这个东西的通项公式,那么就能在 (Theta(1)) 的复杂度内求出答案.

    如果你学过一些数学你可能会记得有这么一个数列:(1,4,9,16,25,...)

    对,没错,这就是完全平方数.然后还有另一个数列:(1,5,14,30,55,...),没错,这就是上一个数列的前(n)项和得到的数列.

    而我们知道这一个数列的通项公式是 (cfrac{n imes(n+1) imes(2n+1)}{6}).

    而我们要的题目中的数列就是这个东西少一点...然后一顿乱凑,你发现题目中的数列的通项公式是这个东西:(cfrac{n imes(n+1) imes(n+2)}{6}).

    愉快(AC)?(NO,NO,NO,too : naive.).

    我们发现(1le n,mle 10^{18}),稍微一运算就会炸,所以要先把(n,m)取模再算.

    愉快(AC).

    C.复印任务

    咕咕咕...

    D.A+B Problem

    矩阵加(1),矩阵求和.经典的二维线段树/二维树状数组题目.
    但你分析一下...这个东西 (1le n,mle 8000) , 二维线段树时空双爆.
    所以只能二维树状数组,而直接开 (int) 也是存不下的.
    我们注意到,模数 (1le p le 256),所以我们使用 (unsigned : char) 存储即可.
    剩下的操作和普通的二维树状数组并无不同.

  • 相关阅读:
    es之java插入优化(批量插入)
    es之java操作插入文档
    使用java操作elasticsearch之与es简历连接
    es之关于consistency(数据一致性问题)
    es之词库热更新解决方案
    es之IK分词器
    es之分词器和分析器
    es之Source字段和store字段
    Elasticsearch的聚合操作
    中缀表达式实现简单计算器
  • 原文地址:https://www.cnblogs.com/Equinox-Flower/p/11668347.html
Copyright © 2011-2022 走看看