【题解】 CF1290D Coffee Varieties (hard version)

题目链接

题目大意

这是一道交互题

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

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

  • 询问:选择一个数\(i(1\leqslant i\leqslant 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

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

先说一下具体的想法。

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

然后就可以开始构造了。

按块长\(s=\lceil\frac k2\rceil\)分块,每次取两块出来询问,然后重置。

然而这样的询问次数是\(\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}{4\lceil\frac k2\rceil}-\frac n2<\frac{3n^2}{2k}\)

注意特判\(n=1\)

原文地址:https://www.cnblogs.com/ztc03/p/12364668.html

时间: 2024-11-09 09:22:21

【题解】 CF1290D Coffee Varieties (hard version)的相关文章

Codeforces Round #616 部分题解

老年选手诈尸? A,B 咕了. C - Prefix Enlightenment 很容易看出这个限制条件可以推出每个点最多被两个集合包含.按照套路,很容易联想到给这两个集合连一条边,表示他们的状态要相同/不同. 因为保证了有解,所以从左往右扫的时候拿并查集维护一下每个连通块的二分图情况,选较小的那一边. 如果只被一个集合覆盖,那么就相当于强制这个集合选/不选,在做并查集的时候特判一下即可. 代码咕了. D - Coffee Varieties (hard version) 作为一名憨憨,做法当然

xhan/qqbot试用

啥是qqbot?基于WebQQ协议的QQ机器人.命令行工具,Hubot支持! 怎样安装?首先要安装CoffeeScript windows:安装nodejs:主页上就有下载C:\Users\cutepig>npm install -g coffee-scriptC:\Users\cutepig>notepad test1.coffeeC:\Users\cutepig>coffee test1.coffeeHello 0Hello 1Hello 2Hello 3Hello 4Hello 5

Coffee and Coursework (Hard Version)

Coffee and Coursework (Hard Version) time limit per test 2.5 seconds memory limit per test 256 megabytes input standard input output standard output The only difference between easy and hard versions is the constraints. Polycarp has to write a course

Hdoj 2501.Tiling_easy version 题解

Problem Description 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法. Input 输入的第一行包含一个正整数T(T<=20),表示一共有 T组数据,接着是T行数据,每行包含一个正整数N(N<=30),表示网格的大小是2行N列. Output 输出一共有多少种铺设的方法,每组数据的输出占一行. Sample Input 3 2 8 12 Sample Output 3 171 2731

题解 CF1203D2 【Remove the Substring (hard version)】

题目链接 Solution CF1203D 题目大意:给定两个字符串\(s\),\(t\), \(t\)是\(s\)的子序列,问最长可以在\(s\)里面删掉多长的连续子序列使得\(t\)仍为\(s\)的子序列 贪心 分析: 假如我们\(t\)的一个前缀要匹配\(s\)的话,显然尽可能往前匹配,这样可以使得答案尽量大,后缀同理 我们用\(suf[i]\)表示\(t[1\dots i]\)可以匹配\(s\)前缀的最前的位置,\(suf[i]\)表示\(t[i \dots |t|]\)可以匹配\(s\

Codeforces Round #540 (Div. 3) 部分题解

Codeforces Round #540 (Div. 3) 题目链接:https://codeforces.com/contest/1118 题目太多啦,解释题意都花很多时间...还有事情要做,就选一些题来写吧. B. Tanya and Candies 题意: 在n个数中任意删去一个,如果这个数被删去后,剩余数的奇数和以及偶数和相等,那么就定义这个数为"好数".现在问这n个数中有多少个“好数”. 题解: 预处理出奇数前缀和.偶数前缀和,删去一个数后所有的奇数位置和 就为前面的奇数和

CF#247(Div. 2)部分题解

引言: 在软件项目中,Maven提供了一体化的类库管理系统,非常实用.但是,如果新增的类库jar在网络上无法获取到,如何在本地按照Maven的规则添加进来呢?本文将通过一个小例子展示新增过程. 背景介绍: 一个Maven管理的Java项目,提供一个系统级别的POM.xml,其中定义了整个项目使用的类库. 需求: 需要添加一个自定义的类库到当前项目中.假定当前的类库文件名为:abc.jar.. 如何将类库添加进来? 1.  找到当前Maven的Repository类库位置 一般默认情况下,在win

codechef Cutting Recipes题解

Cutting Recipes The chef has a recipe he wishes to use for his guests, but the recipe will make far more food than he can serve to the guests. The chef therefore would like to make a reduced version of the recipe which has the same ratios of ingredie

URAL 1907. Coffee and Buns(数论推导+容斥原理)

1907. Coffee and Buns Time limit: 1.0 second Memory limit: 64 MB Planet Ataraxia is known for its education centers. The people who are expected to take high social positions in future are brought up in conditions of continuous training and supervisi