zoukankan      html  css  js  c++  java
  • THUSC2015

    这些题目在BZOJ上面有,可惜是权限题。话说BZOJ上面的题目真的挺好的,要不是我穷,早就去弄个号了!

    言归正传,今年的题目难度可以由一个名人名言看出:

    题目太水。——某某神犇

    可是我掂量了一下,发现如果自己去的话,估计就没什么好果子了。估计只能拿个(100+10+40=150)分了,: (。

    异或运算

    对于每个询问,最基本的思路就是从高位到低位确定答案(因为异或元素位与位之间不影响)。

    举个例子,如果询问第(k)大,那么首先确定最高位,我们可以统计这个询问的矩形里面最高位是(0)个数字个数,假设是(x),那么如果(x leq k),则最高位是(0),否则是(1)。如法炮制,我们就能算出这个答案了。

    看数据范围,发现(n)(p)非常小(这很容易萌生暴搞的想法),我们要做的是,求在询问矩形里,形如YYYYYXXX的数字的数量,其中Y表示答案的最高的已知的几位,X则是任意的(0)(1)。由于(n)很小,这里我们可以把矩形拆成一行一行的横条状,我们分开统计每一行。

    这样我们的问题就变为,在(Y)序列的某段区间里,形如ZZZZZXXX的数量,其中Z是对应的Y与(X_i)的异或值((i)表示是第几行),X的含义同上。这样的话,我们可以排序然后二分,或者是使用可持久化字母树。

    时间复杂度:(O(60 m log m + 60 n plog m))(排序二分)
    (O(60m + 60^2np))(字母树)

    平方运算

    这个应该是最难的一题了吧(对我而言??)。

    由于(p)是给出的,打个表就能发现一些奇怪的性质。这里我用一副图((p=233))展示:图片像素太大,不妨下载下来放大看。

    可以发现,整个图是若干连通块,对于一个连通块来说,是一个环加上周围的若干棵树。由于我没写过,听被人说所有环的长度的最小公倍数在(60)左右,每个点到环的距离在(20)左右。

    假设一开始所有的数都在环上,我们可以维护一个线段树,每个结点记下该区间被修改(k)次后,该区间所有数的和,其中(k)取决于所有环的长度的最小公倍数。这样,时间复杂度为:(O(60nlog n)),这里(k)(60)算。

    现在由于有些数不在环上,我们暴力改并维护线段树就好,因为对于一个数而言,暴力改的次数在(20)左右。

    解密运算

    这题的代码短得吓人!THUSC居然有这样的题。

    假设所有的数不同,那么就是水题一道,因为我们能轻易地算出第一列,同时由知道最后一列,那么我们就知道了每个数字后一个是什么数字。接着,从(0)开始就能推导出答案。

    但是,如果有相同的,举个例子:

    0 * * 1 
    1 * * 0 
    1 * * 2 
    2 * * 1
    

    *表示尚未知的数字。

    我们并不知道跟在第二行的(0)后面的(1)究竟是第一行最后一个(1),还是第四行最后一个。

    我们可以这么想:
    对于下面的情况,最后一列究竟是怎样的。

    1(1) ...... 1(2) ...
    1(2) ... 1(1) ......
    

    括号里边的是唯一的标识。

    我们可以把第一列移到最后一列,得到的新的行,并且这样的行一定存在。这样我们就发现了:对于同一个数字,相对的位置还是不变的。对于最初的例子来说,第二行的(0)后面的(1)就是第一行最后一个(1)

    ...... 1(2) ... 1(1) 
    ... 1(1) ...... 1(2) 
    

    这样,相同的数字其实“不相同”,我们可以加上唯一的标识,那就跟所有数字不相同的做法一样了。

    到此,我们就搞定的THUSC的题目了。你觉得它有NOI的难度吗?

  • 相关阅读:
    Qt5.9/C++项目开发架构理论
    Qt5及模块架构分析
    简单工厂模式实例
    SQL Server 存储过程通用分页
    面试问题
    ASP.Net 基础知识
    财务自由之路名句
    javascript 根据输入的关键词自动提示
    .NET批量更新
    在windows7上配置xampp虚拟主机
  • 原文地址:https://www.cnblogs.com/wangck/p/4609493.html
Copyright © 2011-2022 走看看