• 【题解】 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)

  • 相关阅读:
    toj 2975 Encription
    poj 1797 Heavy Transportation
    toj 2971 Rotating Numbers
    zoj 2281 Way to Freedom
    toj 2483 Nasty Hacks
    toj 2972 MOVING DHAKA
    toj 2696 Collecting Beepers
    toj 2970 Hackle Number
    toj 2485 Card Tric
    js页面定位,相关几个属性
  • 原文地址:https://www.cnblogs.com/ztc03/p/12364668.html
Copyright © 2020-2023  润新知