题目描述

Michael and Brian are stuck in a hotel with $ n $ rooms, numbered from $ 1 $ to $ n $ , and need to find each other. But this hotel's doors are all locked and the only way of getting around is by using the teleporters in each room. Room $ i $ has a teleporter that will take you to room $ a_i $ (it might be that $ a_i = i $ ). But they don't know the values of $ a_1,a_2, \dots, a_n $ .

Instead, they can call up the front desk to ask queries. In one query, they give a room $ u $ , a positive integer $ k $ , and a set of rooms $ S $ . The hotel concierge answers whether a person starting in room $ u $ , and using the teleporters $ k $ times, ends up in a room in $ S $ .

Brian is in room $ 1 $ . Michael wants to know the set $ A $ of rooms so that if he starts in one of those rooms they can use the teleporters to meet up. He can ask at most $ 2000 $ queries.

The values $ a_1, a_2, \dots, a_n $ are fixed before the start of the interaction and do not depend on your queries. In other words, the interactor is not adaptive.

$ 2 \leq n \leq 500 $

当你已经知道了 \(1\) 所在的环之后,就很好判断一个点和在一个连通块了。判断一下这个点走 \(n\) 步之后是否在那个环就行了。

我们可以用二分求出一个 \(a_x\).

可以先用 \(1\) 走 \(n\) 步得到环上的某一个点 \(x\),如何扩展出整个环。首先可以一个个求 \(a_x\),那么大概是 \(9n\) 的时间,不行。

考虑倍增。假设我们现在得到了环上的 \(c\) 个点,那么我们可以通过询问一个点走 \(c\) 步是否在环上,这样可以在 \(O(n)\) 的次数内求出 \(c\) 个环上的点。

考虑把上面两种方式结合起来,先用第一种方法求出 \(64\) 个点,然后用第二种方法倍增出剩下的就行了。

细节很多。

#include<bits/stdc++.h>
using namespace std;
const int N=505;
int n,x,a[N],v[N],p[31][N],k,q[N],fa[N],m=1,cnt=0;
mt19937 gen(time(0));
int find(int x)
{
if(fa[x]==x)
return x;
return fa[x]=find(fa[x]);
}
int ok()
{
int c=0;
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=n;i++)
fa[find(p[0][i])]=find(i);
for(int i=1;i<=n;i++)
if(find(i)==find(1))
++c;
if(c^m)
return 0;
for(int i=1;i<=m;i++)
if(find(a[i])^find(1))
return 0;
return 1;
}
void maker()
{
for(int i=1;i<=n;i++)
{
p[0][i]=gen()%n+1;
//printf("%d ",p[0][i]);
}
for(int j=1;j<=30;j++)
for(int k=1;k<=n;k++)
p[j][k]=p[j-1][p[j-1][k]];
}
/*int qry(int x,int k,int m)
{
++cnt;
int px=x;
if(x>n||x<1)
{
puts("Wrong query");
return 0;
}
for(int i=30;~i;--i)
if(k>>i&1)
x=p[i][x];
for(int i=1;i<=m;i++)
if(q[i]==x)
return 1;
return 0;
}*/
int ask(int u,int k)
{
int l=1,r=n;
while(l<r)
{
int md=l+r>>1;
printf("? %d %d %d ",u,k,md-l+1);
for(int i=l;i<=md;i++)
printf("%d ",i);
puts("");
fflush(stdout);
scanf("%d",&x);
/*for(int i=l;i<=md;i++)
q[i-l+1]=i;
x=qry(u,k,md-l+1);*/
if(x)
r=md;
else
l=md+1;
}
return l;
}
int main()
{
scanf("%d",&n);
maker();
a[1]=ask(1,1000000000);
v[a[1]]=1;
for(int i=1;i>=0&&i<=n;i<<=1)
{
int pm=m;
if(i*9<n)
{
for(int j=1;j<=i;j++)
{
a[m+1]=ask(a[m],1),++m;
if(v[a[m]])
j=i,i=-1,--m;
else
v[a[m]]=1;
}
}
else
{
for(int j=1;j<=n;j++)
{
if(v[j])
continue;
printf("? %d %d %d ",j,i,m);
for(int k=1;k<=m;k++)
printf("%d ",a[k]);
puts("");
fflush(stdout);
scanf("%d",&x);
/*for(int k=1;k<=i;k++)
q[k]=a[k];
x=qry(j,i,i);*/
if(x)
v[a[++m]=j]=1;
}
}
if(m==pm)
break;
if(2*i>m)
break;
}
q[1]=a[1];
for(int i=1;i<=n;i++)
{
if(!v[i])
{
printf("? %d 1000000000 %d ",i,m);
for(int j=1;j<=m;j++)
printf("%d ",a[j]);
puts("");
fflush(stdout);
scanf("%d",&x);
/*for(int j=1;j<=m;j++)
q[j]=a[j];
x=qry(i,1000000000,m);*/
if(x)
a[++m]=i;
}
}
printf("! %d ",m);
for(int i=1;i<=m;i++)
printf("%d ",a[i]);
fflush(stdout);
/*if(ok())
printf("succes,%d\n",cnt);
else
puts("failed");*/
return 0;
}

[CF1854D] Michael and Hotel的更多相关文章

  1. [ZZ] A Proposal For Compiling Direct3D HLSL With LLVM (Written by Michael Larabel )

    http://www.phoronix.com/scan.php?page=news_item&px=OTI2NA Note:  Something very instersting to w ...

  2. Michael Schatz - 序列比对课程

    Michael Schatz - Cold Spring Harbor Laboratory 最近在研究 BWA mem 序列比对算法,直接去看论文,看不懂,论文就3页,太精简了,好多背景知识都不了解 ...

  3. POJ 3667 Hotel(线段树 区间合并)

    Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...

  4. ACM: Hotel 解题报告 - 线段树-区间合并

    Hotel Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description The ...

  5. HDU - Hotel

    Description The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and e ...

  6. 【POJ3667】Hotel

    Description The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and e ...

  7. POJ-2726-Holiday Hotel

    Holiday Hotel   Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8302   Accepted: 3249 D ...

  8. Method threw 'org.hibernate.exception.SQLGrammarException' exception. Cannot evaluate com.hotel.Object_$$_jvst485_15.toString()

    数据库字段和类Object属性不匹配,Method threw 'org.hibernate.exception.SQLGrammarException' exception. Cannot eval ...

  9. poj 3667 Hotel(线段树,区间合并)

    Hotel Time Limit: 3000MSMemory Limit: 65536K Total Submissions: 10858Accepted: 4691 Description The ...

  10. [听课笔记]Professor Michael Cusumano's New Book:" Strategy Rules: Five Timeless Lessons from Bill Gates, Andy Grove, and Steve Jobs"

    1. Look Forward, Reason Back Extrapolate, interpret, then tie vision to concrete actions2. Make Big ...

随机推荐

  1. Chrome116驱动下载路径 解决版本不匹配问题

    更新于 2023-08-23 后续可能会有同步,就不会引发该问题 要看解决可以直接看最后的总结 背景 执行selenium代码报错 from selenium import webdriver dri ...

  2. linux cat查看文件使用grep实现多条件多场景过滤

    转载请注明出处: 在实际应用过程中,我们查看日志文件时,经常会根据一定自定义的词语过滤,查看所有相关的数据行.最近遇到用cat查看文件,需要根据多关键词进行不同的场景过滤,在这里进行一个简单的总结: ...

  3. HarmonyOS扫码服务,应用服务一扫直达打造系统级流量新入口

    二维码如今是移动应用流量入口以及功能实现的重要工具,也是各App的流量入口,是物.人.服务的连接器,通过扫码我们可以更便捷的生活,更高效的进行信息交互,包括信息的发布.信息的获取. 在日常扫码过程中, ...

  4. 性能调优 session 1 - 计算机体系结构 量化研究方法

    近期本人参与的存储系统项目进入到性能调优阶段,当前系统的性能指标离项目预期目标还有较大差距.本人一直奉行"理论指导下的实践",尤其在调试初期,更要抓住主要矛盾,投入最少的资源来获取 ...

  5. DevOps |研发效能之环境、程序、配置、SQL变更管理

    本文主要是讲如何建立有效的环境.程序.配置.SQL变更和管理平台. ​几天前和一个朋友聊到环境.程序的配置变更,SQL变更和整个上线流程.之前我们在这块也做了很多,有做的好的也有做的一般的,借机都总结 ...

  6. 图解 LeetCode 算法汇总——链表

    本文首发公众号:小码A梦 一般数据主要存储的形式主要有两种,一种是数组,一种是链表.数组是用来存储固定大小的同类型元素,存储在内存中是一片连续的空间.而链表就不同于数组.链表中的元素不是存储在内存中可 ...

  7. 当开源项目 Issue 遇到了 DevChat

    目录 1. 概述 2. Bug 分析与复现 3. Bug 定位与修复 4. 代码测试 5. 文档更新 6. 提交 Commit 7. 总结 1. 概述 没错,又有人给 GoPool 项目提 issue ...

  8. 聊聊数据库事务内嵌TCP连接

    最近再看项目代码,发现很多的service里面,喜欢在事务内部再去调用HTTP请求,简单分析下此种方式的利弊与解决策略. 概述 在数据库内部嵌套TCP连接(一般是HTTP调用或是RPC远程调用). @ ...

  9. Solution -「LOCAL 28731」「重庆市 2021 中学友谊赛」Rainyrabbit 爱求和

    Description Link. \(\operatorname{Rainyrabbit}\) 是一个数学极好的萌妹子,近期他发现了一个可爱的函数: \[f(n,m,k)=\sum_{d=1}^n ...

  10. 一文带你实现云上部署轻量化定制表单Docker

    本文分享自华为云社区 <[华为云云耀云服务器L实例评测|云原生]自定制轻量化表单Docker快速部署云耀云服务器 | 玩转华为云>,作者:计算机魔术师. 华为云的云耀云服务器L实例备受推崇 ...