The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)

在知乎内查看

题目

img

思路来源

img

题解

首先特判n=1的情况,其实也不用问

分治,假设当前解决到[l,r],要递归的vector是x,

维护两个vector L、R,代表下一步要在[l,mid]和[mid+1,r]分治的vector

每次将x random_shuffle后,取出vector尾部的两个u、v,

计分界点为mid,<=mid的全填u,>mid的全填v,看询问出的答案:

  1. 如果为0,说明都询问错了,则交换u、v所在位置,放进对应vector
  2. 如果为2,说明都询问对了,直接放入对应vector
  3. 否则为1,说明u和v位于一边,此时将v塞进del这个vector里,将u和v在并查集上合并,并把u塞回x

重复这个过程,直至x为空或只剩一个元素,

只剩一个元素时,L或R一定已经有元素,

和已经被询问出来的元素再一起询问一次,就能确定出这个元素该放进L还是R

代码中用to数组记录了是放进左边还是放进右边,

这样del里的元素,在并查集上找到其祖先时,可以用to数组确定其应该被放进L还是R

期望次数是6000的,实际跑得飞快,也没被卡掉

代码

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
#include<set>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<ll,ll> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
const int N=1e3+10;
int n,ans[N],q[N],par[N],to[N];
int find(int x){return par[x]==x?x:par[x]=find(par[x]);
}
int ask(){printf("0");rep(i,1,n){printf(" %d",q[i]);}printf("\n");fflush(stdout);int v;sci(v);return v;
}
void out(){printf("1");rep(i,1,n){printf(" %d",ans[i]);}printf("\n");fflush(stdout);
}
void sol(int l,int r,vector<int>x){//printf("l:%d r:%d ",l,r);//for(auto &v:x)printf("%d ",v);puts("");if(l==r){ans[l]=x[0];return;}for(auto &v:x)par[v]=v;int mid=(l+r)/2;vector<int>L,R,del;while(SZ(x)>1){random_shuffle(x.begin(),x.end());int u=x.back();x.pop_back();int v=x.back();x.pop_back();rep(i,1,n){if(i<=mid)q[i]=u;else q[i]=v;}int w=ask();if(!w)L.pb(v),R.pb(u),to[v]=0,to[u]=1;else if(w==2)L.pb(u),R.pb(v),to[u]=0,to[v]=1;else del.pb(v),x.pb(u),par[v]=u;}//printf("x:%d L:%d R:%d\n",SZ(x),SZ(L),SZ(R));if(SZ(x)==1){int u=x[0];if(SZ(L)){rep(i,1,n){if(i<=mid)q[i]=u;else q[i]=L[0];}int w=ask();if(!w)R.pb(u),to[u]=1;else L.pb(u),to[u]=0;}else if(SZ(R)){rep(i,1,n){if(i<=mid)q[i]=R[0];else q[i]=u;}int w=ask();if(!w)L.pb(u),to[u]=0;else R.pb(u),to[u]=1;}else{assert(false);}}for(auto &v:del){int fa=find(v);if(!to[fa])L.pb(v);else R.pb(v);}if(SZ(L))sol(l,mid,L);if(SZ(R))sol(mid+1,r,R);
}
void sol(){if(n==1){ans[1]=1;out();return;}vector<int>now;rep(i,1,n)now.pb(i);sol(1,n,now);out();
}
int main(){srand(time(NULL));sci(n);sol();return 0;
}
//2 3 4 1 5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

易基因:J Hazard Mater/IF12.2:RRBS揭示农药诱导胰腺全基因组DNA甲基化跨代改变与代谢表型相关

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 人造化学品的不当使用会对生物多样性和人类健康构成重大威胁&#xff0c;某些化学物质&#xff08;如农药&#xff09;可能通过表观遗传机制&#xff08;如DNA甲基化&#xff09;对代谢健…

如何批量找到企业联系电话

在拓展业务的过程中&#xff0c;找到企业的联系电话是必不可少的一步。然而&#xff0c;手动查找不仅耗时费力&#xff0c;效率也低下。对于需要批量获取客户信息的销售人员或企业来说&#xff0c;寻找一种快速、精准的方式批量获取企业联系电话显得尤为重要。本文将为你介绍几…

MPLS LDP协议

文章目录 LDP标签分发协议工作原理LDP应用倒数第二跳弹出 LDP标签分发协议 基于FEC自动分配标签构建LSP用于建立动态LSPLDP报文头部结构信息类型 工作原理 LDP工作过程 发送Hello消息用于发现邻居&#xff1b;UDP发送LSR_1主动发起并建立TCP连接&#xff1b;TCP进行建立主动方发…

怎么利用商品详情API接口实现数据获取与应用?

在当今数字化的商业时代&#xff0c;高效获取和利用商品数据对于企业和开发者来说至关重要。商品详情 API 接口为我们提供了一种便捷的方式来获取丰富的商品信息&#xff0c;从而实现各种有价值的应用。本文将深入探讨如何利用商品详情 API 接口实现数据获取与应用。 一、商品…

STM32 HAL库UART查询方式实例

本文中介绍USART编程涵盖了三种主要方法&#xff0c;详细介绍STM32F407微控制器结合HAL库&#xff0c;通过UART的查询方式来实现一个实用的密码验证程序。提示用户键入一个字符作为密码。只有当用户精准地输入字符6时&#xff0c;系统才会反馈“密码正确”的确认信息。反之&…

【重学 MySQL】五十六、位类型

【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中&#xff0c;位类型&#xff08;BIT类型&#xff09;是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值&#xff0c;其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…

requestidlecallback与分时函数

前言 我们知道GUI 渲染线程与 JS 引擎线程是互斥的。当JS程序执行时间过长&#xff0c;会阻塞页面渲染和事件响应。那么针对一些优先级较低的任务&#xff0c;我们可以利用分时函数在主线程空闲时执行&#xff0c;减少卡顿。其本质是将一个长任务拆分成数个短任务&#xff0c;…

国产工具链GCKontrol-GCAir助力控制律开发快速验证

前言 随着航空领域技术的不断发展&#xff0c;飞机的飞行品质评估和优化成为了航空领域的一个重要任务&#xff0c;为了确保飞行器在各种复杂条件下的稳定性&#xff0c;控制律设计过程中的模型和数据验证需要大量仿真和测试。 本文将探讨基于世冠科技的国产软件工具链GCKont…

Leetcode 37. 解数独

1.题目基本信息 1.1.题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 33 宫内只能出现一次。&#xff08;请参考…

如何设置 GitLab 密码长度?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 60天专业…

cudnn8编译caffe过程(保姆级图文全过程,涵盖各种报错及解决办法)

众所周知,caffe是个较老的框架,而且只支持到cudnn7,但是笔者在复现ds-slam过程中又必须编译caffe,我的cuda版本是11.4,最低只支持到8.2.4,故没办法,只能编译了 在此记录过程、报错及解决办法如下; 首先安装依赖: sudo apt-get install git sudo apt-get install lib…

facebook受众选择设置策略的最佳方式

在进行Facebookguanggao投放时&#xff0c;受众的选择是一个至关重要的步骤。正确的受众选择不仅能够帮助我们更好地定位目标用户&#xff0c;还能显著提高guanggao的转化率和投资回报率&#xff08;ROI&#xff09;。然而&#xff0c;受众选择的数量和范围同样是需要认真考虑的…

【Tor】使用Debian系统搭建obfs4 Bridge网桥

你好 我是无聊的木子。 目录 前言 写作の原因 网桥是个啥? 正文 - 到底咋搭建捏 搞台机子先 比较简便の方法 - 买台云服务器 首月五折 一元试用 远程连接服务器 更加复杂の办法 - 自己拿物理机做网桥 开始搭建网桥 先安装Tor 然后配置网桥 最后组合网桥 找到fin…

大数据面试-笔试SQL

一个表table: c_id u_id score&#xff1b;用SQL计算每个班级top5学生的平均分&#xff08;腾讯&#xff09; select class_id,avg(score) as score_avg from (select *,row_number() over(partition by class_id order by score desc) as score_rank from table ) t1 where t…

AI推理部署工具之大汇总,后面会逐步补充

目录 1、FastDeploy 1.1 安装 1.2 yolo推理部署示例 1.3 推理部署思路 1、FastDeploy FastDeploy 通过提供简洁的API接口&#xff0c;让AI推理部署变得更加高效和灵活。适用于多种主流算法模型&#xff0c;且支持跨平台、多硬件兼容等优势。 支持 GPU、CPU、Jetson、ARM …

研发中台拆分之路:深度剖析、心得总结与经验分享

背景在 21 年&#xff0c;中台拆分在 21 年&#xff0c;以下为中台拆分的过程心得&#xff0c;带有一定的主观&#xff0c;偏向于中小团队中台建设参考&#xff08;这里的中小团队指 3-100 人的团队&#xff09;&#xff0c;对于大型团队不太适用&#xff0c;毕竟大型团队人中 …

Qt源码-Qt多媒体音频框架

Qt 多媒体音频框架 一、概述二、音频设计1. ALSA 基础2. Qt 音频类1. 接口实现2. alsa 插件实现 一、概述 环境详细Qt版本Qt 5.15操作系统Deepin v23代码工具Visual Code源码https://github.com/qt/qtmultimedia/tree/5.15 这里记录一下在Linux下Qt 的 Qt Multimedia 模块的设…

Java | Leetcode Java题解之第472题连接词

题目&#xff1a; 题解&#xff1a; class Solution {Trie trie new Trie();public List<String> findAllConcatenatedWordsInADict(String[] words) {List<String> ans new ArrayList<String>();Arrays.sort(words, (a, b) -> a.length() - b.length(…

RelationGraph实现工单进度图——js技能提升

直接上图&#xff1a; 从上图中可以看到整个工单的进度是从【开始】指向【PCB判责】【完善客诉】【PCBA列表】&#xff0c;同时【完善客诉】又可以同时指向【PCB判责】【PCBA列表】&#xff0c;后续各自指向自己的进度。 直接上代码&#xff1a; 1.安装 1.1 Npm 方式 npm …

JavaScript下载文件(简单模式、跨域问题、文件压缩)

文章目录 简介简单文件下载通过模拟form表单提交通过XMLHttpRequest方式 跨域(oss)下载并压缩文件完整示例文件压缩跨域设置 简介 相信各位开发朋友都遇到过下载的文件的需求&#xff0c;有的非常简单&#xff0c;基本链接的形式就可以。 有的就比较复杂&#xff0c;涉及跨域…