The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)
在知乎内查看
题目

思路来源

题解
首先特判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,看询问出的答案:
- 如果为0,说明都询问错了,则交换u、v所在位置,放进对应vector
- 如果为2,说明都询问对了,直接放入对应vector
- 否则为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
相关文章:
The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)
在知乎内查看 题目 思路来源 题解 首先特判n1的情况,其实也不用问 分治,假设当前解决到[l,r],要递归的vector是x, 维护两个vector L、R,代表下一步要在[l,mid]和[mid1,r]分治的vector 每次将x random_shuffle后&a…...
TensorFlow与Pytorch的转换——1简单线性回归
import numpy as np# 生成随机数据 # 生成随机数据 x_train np.random.rand(100000).astype(np.float32) y_train 0.5 * x_train 2 import tensorflow as tf# 定义模型 W tf.Variable(tf.random.normal([1])) b tf.Variable(tf.zeros([1])) y W * x_train b # 定义损失函…...
短剧小程序短剧APP在线追剧APP网剧推广分销微短剧小剧场小程序集师知识付费集师短剧小程序集师小剧场小程序集师在线追剧小程序源码
一、产品简介功能介绍 集师专属搭建您的独有短剧/追剧/小剧场小程序或APP平台 二、短剧软件私域运营解决方案 针对短剧类小程序的运营,以下提出10条具体的方案: 明确定位与目标用户: 对短剧类小程序进行明确定位,了解目标用户群体…...
AI与物理学的交汇:Hinton与Hopfield获诺贝尔物理学奖
诺贝尔物理学奖颁给了AI!机器学习先驱Hinton与Hopfield联手获奖,出乎所有人的意料。 今年的诺贝尔物理学奖颁给了机器学习领域的两位先驱,杰弗里辛顿(Geoffrey Hinton)和约翰霍普菲尔德(John Hopfield&…...
六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询
本文基于六西格玛设计方法论,对消费级无人机的设计流程进行系统化研究,探讨如何通过六西格玛设计的理念、工具和方法提升无人机产品的设计质量和市场竞争力。文章从市场定位、客户需求分析出发,深入到关键KPI指标的制定,并逐步阐述…...
按分类调用标签 调用指定分类下的TAG
按分类调用标签 调用指定分类下的TAG <?php query_posts(category_namenews); if (have_posts()) : while (have_posts()) : the_post(); if( get_the_tag_list() ){ echo $posttags get_the_tag_list(<li class"jquery">,</li><li>,</li…...
报错 - llama-index pydantic error | arbitrary_types_allowed | PydanticUserError
国庆节前使用 LiteLLMEmbedding 设置 llama-index Settings.embed_model 还好好的,回来后,就就报错,试着降级 llama-index 也无用;设置 Settings.llm 也是好好地。 解决方法:conda 重新创建环境后,在安装 …...
PostgreSQL Docker Error – 5432: 地址已被占用
PostgreSQL Docker Error – 5432: 地址已被占用 今天在学习【Spring Boot React】价值79.9美元,全栈开发,搭建个人网站、做毕业设计、试试这套课程第17~21节视频的时候,发现运行docker run --name demo-postgres -e POSTGRES_PASSWORDpass…...
【LeetCode】动态规划—646. 最长数对链(附完整Python/C++代码)
动态规划—646. 最长数对链 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 贪心方法 4. 进一步优化5. 小总结 代码实现PythonPython3代码实现Python 代码解释 CC代码实现C 代码解释 总结 前言 在这个问题中,我们需要找到可…...
数字媒体产业园区:创新资源集聚,助力企业成长
在当今数字化浪潮汹涌的时代,数字媒体产业园区作为创意与技术的交汇点,正以其独特的魅力和无限的潜力,成为助力企业成长的重要平台。其中,“数字媒体产业园区”以其创新资源的集聚效应,为入驻企业提供了广阔的发展空间…...
【Linux】来查看当前系统的架构
使用 uname 命令 uname -m 使用 arch 命令 arch 查看 /proc/cpuinfo 文件 查找 model name 或 Processor 字段。 cat /proc/cpuinfo 使用 lscpu 命令 lscpu...
QT中的信号槽
1.解释说明 1- qt中一般是使用信号槽来绑定对应的事件 2- 可以在初始化中调用connect来调用 3- 这里分别用头文件、源文件、界面文件去写示例 2.头文件.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class Mai…...
域名怎么转让给别人?
域名怎么转让给别人?许多企业和个人在发展过程中可能会选择转让域名,无论是因为业务重组、品牌更换,还是为了实现经济利益。那么,如何将域名顺利转让给他人呢?本文将详细介绍域名转让的步骤和注意事项。 一、了解域名转让的基本概念 域名…...
计算机网络思维导图
计算机网络 网络层 概述 主要任务 实现网路互连,进而实现数据包在各网络之间的传输 解决问题 向运输层提供可靠传输/不可靠传输的服务网络层寻址问题路由选择问题 英特网时使用最多的互联网,使用TCP/IP协议栈 网络层使用网际协议IP,时整个…...
07.useDefault
在 React 应用开发中,处理状态的默认值和空值情况是一个常见需求。useDefault 钩子提供了一种优雅的方式来管理状态,同时为空值(null 或 undefined)提供默认回退值。这个自定义钩子不仅简化了状态管理,还提高了代码的可读性和健壮性。以下是如何实现和使用这个自定义钩子:…...
git更加详细和灵活的提交过程,附带如何配置. gitignore来忽略部分文件的提交。
本套流程可以控制提交的代码是哪些,比直接使用git add . 更灵活,比如在项目中,一些文件不能通过.gitignore进行尽职提交,那么就需要使用本方法来手动控制是否提交,缺点就是相对麻烦一些。 git status//查看从当前工作…...
使用正则表达式删除文本的奇数行或者偶数行
用智谱清言和kimi搜出来的结果都没法在notepad生效,后面在overflow上找到的答案比较靠谱。 查找:^[^\n]*\n([^\n]*) 替换:\1 删除偶数行 查找:^([^\n]*)\n[^\n]* 替换:\1 代码解释 ^:这个符号代表字符…...
YOLOv10改进策略【注意力机制篇】| CVPR2024 CAA上下文锚点注意力机制
一、本文介绍 本文记录的是基于CAA注意力模块的YOLOv10目标检测改进方法研究。在远程遥感图像或其他大尺度变化的图像中目标检测任务中,为准确提取其长距离上下文信息,需要解决大目标尺度变化和多样上下文信息时的不足的问题。CAA能够有效捕捉长距离依赖,并且参数量和计算量…...
Unity修改鼠标图片【超简单】
1.向Unity导入需要修改的鼠标图片,在Unity内设置图片的Texture Type为Cursor。 2.编写代码 [SerializeField] Texture2D mouseTex;//放图片 void Start() {Cursor.SetCursor(mouseTex, Vector2.zero, CursorMode.Auto); }3.代码挂载在某物体(或者随便哪…...
windows C++-创建数据流代理(三)
以下示例展示了 log_agent 类,它类似于 dataflow_agent 类。 log_agent 类实现异步记录代理,用于将日志消息写入文件和控制台。 log_agent 类使应用程序能够将消息分类为信息性、警告或错误消息。 它还使应用程序能够指定每个日志类别是写入文件、控制台…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
多模态大语言模型arxiv论文略读(110)
CoVLA: Comprehensive Vision-Language-Action Dataset for Autonomous Driving ➡️ 论文标题:CoVLA: Comprehensive Vision-Language-Action Dataset for Autonomous Driving ➡️ 论文作者:Hidehisa Arai, Keita Miwa, Kento Sasaki, Yu Yamaguchi, …...
