• 【题解】 CF1290D Coffee Varieties (hard version)


    题目链接

    题目大意

    这是一道交互题

    有一个长度为(n)的未知序列(a)和一个大小为(k)的队列(S)。保证(1leqslant kleqslant nleqslant 1024),且(n,k)都是(2)的次幂。

    你可以进行以下两种操作:

    • 询问:选择一个数(i(1leqslant ileqslant n)),并输出? i

      • 交互程序会先检查(S)中是否包含(a_i),是则输出Y,否则输出N
      • 然后将(a_i)加入队尾,若(|S|>k),则弹出队首。
    • 重置:输出R,交互程序会清空队列。

    保证(frac{3n^2}{2k}leqslant 15000)

    你需要在不超过(frac{3n^2}{2k})次询问和不超过(30000)次重置之内得出序列(a)中不同数的数量(d),并输出! d

    构造题嘛,那就是乱搞一通的事情做法不唯一。

    先说一下具体的想法。

    对于每个(iin[1,n]),要确认(a_i)是否在前面出现过,最后前面没出现过的(a_i)的数量就是不同数的数量。

    然后就可以开始构造了。

    按块长(s=lceilfrac k2 ceil)分块,每次取两块出来询问,然后重置。

    然而这样的询问次数是(frac{n^2}s-n)的,并不能通过此题。

    ztc的辣鸡构造:

    每次取出第一块、中间的某一块、最后一块来询问,之后再取第一块和最后一块来询问,再删掉第一块和最后一块,递归处理,直至删完。

    询问次数:设有(a)块时次数为(F(a)),则(F(a)=3s(a-2)+2s+F(a-2)=frac 34a^2s-frac 12as)

    代入(as=n)得总次数(large frac{3n^2}{4lceilfrac k2 ceil}-frac n2<frac{3n^2}{2k})

    注意特判(n=1)

  • 相关阅读:
    Making your first driver
    注册表与盘符(转victor888文章 )
    电脑Win7如何取得文件管理所有权(提供各种GHOST版本的Windows)
    可拖动的DIV
    IE Javascript 进阶调试
    优化性能
    命令模式
    MVC 4 结合jquery.uploadify 上传实例
    IIS处理并发请求时出现的问题及解决
    Spring3.2 + Hibernate4.2
  • 原文地址:https://www.cnblogs.com/ztc03/p/12364668.html
Copyright © 2020-2023  润新知