zoukankan      html  css  js  c++  java
  • 【题解】 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)

  • 相关阅读:
    acm课程练习2--1005
    acm课程练习2--1003
    [ZJOI2010]网络扩容
    [ZJOI2009]狼和羊的故事
    [FJOI2007]轮状病毒
    [NOIP2016提高组]换教室
    [NOIP2016提高组]愤怒的小鸟
    [NOIP2009提高组]最优贸易
    [洛谷P2245]星际导航
    [NOIP2013提高组]货车运输
  • 原文地址:https://www.cnblogs.com/ztc03/p/12364668.html
Copyright © 2011-2022 走看看