每日练习 25.2.6

news/2025/2/6 21:18:47/文章来源:https://www.cnblogs.com/AokiHina/p/18701709

Nastia and a Hidden Permutation

题目

娜斯佳有一个长度为 \(n\) 的隐藏排列 \(p\),由从 \(1\)\(n\) 的整数组成。出于某种原因,你想找出这个排列。为此,您可以给她一个整数 \(t\) \(( 1 \le t \le 2 )\),两个不同的索引 \(i\)\(j\) \(( 1 \le i, j \le n ,i \neq j )\),以及一个整数 \(x\) \(( 1 \le x \le n - 1 )\)

根据 \(t\),她将给出答案:

  • \(t = 1\) : \(\max{(\min{(x, p_i)}, \min{(x + 1, p_j)})}\)
  • \(t = 2\) : \(\min{(\max{(x, p_i)}, \max{(x + 1, p_j)})}\)

您最多可以询问娜斯佳 \(\lfloor \frac {3 \cdot n} { 2} \rfloor + 30\) 次。保证她不会因为你的询问而改变她的排列。你能猜出排列组合吗?

分析

考虑用 \(t=2,i,i+1,1\) 问出 \(1\) 的位置。

当答案等于 \(2\)\(p_i,p_{i+1}\) 中必有 \(1\)\(2\);当答案等于 \(1\) 时则 \(p_i = 1\)

此时考虑使用 \(t=1,\text{1的位置},x,n-1\) 对每个位置询问,得出答案。

#include<bits/stdc++.h>
//#define int long long
int read() {int x=0; bool f=false; char ch=(char)getchar();while(! isdigit(ch)) f|=(ch == '-'),ch=(char)getchar();while(isdigit(ch)) x=x*10+(ch^48),ch=(char)getchar();return f ? -x : x;
}
using namespace std;
const int N=1e4+10;
int a[N],n;
void query(int t,int i,int j,int x) {cout<<"? "<<t<<" "<<i<<" "<<j<<" "<<x<<endl;
}
void sol() {n=read(); int tmp = 0;for(int i=1;i<=n;i+=2) {query(2,i,i%n+1,1);int op=read();if(op == 1) tmp=i;if(op == 2) {query(2,i%n+1,i,1);int x=read();if(x == 1) tmp=i%n+1;}}a[tmp]=1;for(int i=1;i<=n;i++) {if(i == tmp) continue ;query(1,tmp,i,n-1); a[i]=read();}cout<<"!";for(int i=1;i<=n;i++) printf(" %d",a[i]);puts("");fflush(stdout);
}
signed main() {int T=read();while(T -- ) sol();return 0;
}

Armchairs

题目

\(n\) 把扶手椅,从左到右编号为 \(1\)\(n\)。有些扶手椅上有人(每把扶手椅上最多有一个人),有些扶手椅上没有人。有人坐的扶手椅数量不大于 \(\frac{n}{2}\)

出于某种原因,你想让人们从自己的扶手椅上换到其他扶手椅上。如果 \(i\) 把扶手椅有人坐,而 \(j\) 把扶手椅没人坐,那么你可以让坐在 \(i\) 把扶手椅上的人搬到 \(j\) 把扶手椅上。一个人从 \(i\) 把扶手椅移动到 \(j\) 把扶手椅所需的时间是 \(|i - j|\) 分钟。您可以多次执行这个操作,但是这些操作必须按顺序进行,也就是说,在您上一次要求移动的人移动到他们的目的地扶手椅之前,您不能告诉别人移动。

您希望实现以下情况:每个最初被占用的座位都必须空出来。最少需要多长时间才能做到?

分析

考虑一个模拟费用流里面常见的结论,一个人到一把椅子与另一个人到另一把椅子,路线是不会交叉的,交叉一定不优。

意识到背后一定有一个费用流模型后,考虑一下 \(dp\) 吧。

\[f_{i,j} = min_{k = 1}^{j - 1} f_{i - 1,k} + |b_i - c_j| \]

\(f_{i,j}\) 表示第 \(i\) 个人挪到第 \(j\) 位置的最小代价。

#include<bits/stdc++.h>
//#define int long long
int read() {int x=0; bool f=false; char ch=(char)getchar();while(! isdigit(ch)) f|=(ch == '-'),ch=(char)getchar();while(isdigit(ch)) x=x*10+(ch^48),ch=(char)getchar();return f ? -x : x;
}
using namespace std;
const int N=5e3+10;
int f[N][N],n,a[N],p[N],cnt;
signed main() {memset(f,0x3f,sizeof f);n=read();for(int i=1;i<=n;i++) {a[i]=read(); if(a[i]) p[++cnt]=i;}for(int i=0;i<=n;i++) f[0][i]=0;for(int i=1;i<=cnt;i++)for(int j=1;j<=n;j++) {if(a[j]) f[i][j]=f[i][j-1];else f[i][j]=min(f[i][j-1],f[i-1][j-1]+abs(p[i]-j));}printf("%d\n",f[cnt][n]);return 0;
}

Robot Collisions

题目

\(n\) 个机器人沿 OX 轴行驶。还有两面墙:一面位于坐标 \(0\) 处,另一面位于坐标 \(m\) 处。

\(i\) -th 机器人从整数坐标 \(x_i (0 < x_i < m )\) 开始,以每秒 \(1\) 个单位的速度向左(朝向 \(0\))或向右移动。没有两个机器人从同一个坐标开始。

每当一个机器人到达一堵墙时,它就会立即掉头,并以相同的速度朝相反的方向继续前进。

每当几个机器人在同一整数坐标处相遇,它们就会相撞并爆炸成灰尘。一旦一个机器人爆炸,它就不会再与其他机器人相撞。请注意,如果多个机器人在非整数坐标处相遇,则不会发生任何事情。

查找每个机器人是否爆炸,如果爆炸,则打印爆炸时间,否则打印 \(-1\)

分析

我写不动了,我要开始口胡了。

注意到奇偶性相同的机器人才会相撞,奇偶性不同的永远只会擦肩而过。

再考虑在左边向右的和在右边向左的肯定先撞,括号序 \(LR\)

这样操作完,剩下的序列是 \(LLL \cdots RRR\) 这个样式的,此时左边第一个肯定与左边第二个相撞,左边第三个与左边第四个相撞,以此类推。

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

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

相关文章

2025多校冲刺省选模拟赛9

2025多校冲刺省选模拟赛9\(T1\) A. 鸬鹚 \(20pts\)部分分\(30pts\)顺次迭代,并查集优化不明显。判断矩形相交时在特判掉包含后可以直接代入四个角进行判断。点击查看代码 struct node {int x1,x2,y1,y2;node operator + (const node &another) const{return (node){min(x1…

KVM在传递虚拟机镜像到时候的错误的解决方案An auth plugin is required to determine endpoint URL

最近在玩Openstack和KVM, Openstack是用devstack安装的, 但是在用kvm创建镜像到Openstack的时候出现这个错误,An auth plugin is required to determine endpoint URL,参考 了网上所有的方案都失败了,自己最终尝试用这个方式解决了,分享给需要的朋友。 修改/opt/admin-op…

IDEA 接入 DeepSeek,太酷了!

你好,我是 Guide。前两天,我发文提到 DeepSeek 的回答推荐了我的资料 《JavaGuide 面试突击版》(PDF):DeepSeek 的这波回答我给满分!。 这篇文章简单介绍一下如何在常用的 IDE 中接入 DeepSeek,这里以 Java 开发最常用的 IDEA 为例。 目前,IDEA 中接入 DeepSeek,可以借…

社媒风控下的生存法则:云手机如何为Facebook、X(Twitter)账号安全护航

社媒风控下的生存法则:云手机如何为Facebook、X(Twitter)账号安全护航 在社交媒体平台(如Facebook、X/Twitter)风控日益严格的背景下,账号安全成为运营者的核心痛点。平台通过检测设备指纹、IP地址、SIM卡信息等参数,对批量操作、异常登录或虚拟环境进行封号限制。云手机…

还在为标准“头秃”?数字化转型秘籍来了!

数字化浪潮席卷而来,企业都想“乘风破浪”,可标准化管理这块“基石”要是没打牢,小心“翻船”哦!别担心,我们带着标准制修订信息管理系统来拯救你啦!这可不是一般的系统,它能让你的标准化工作从“石器时代”直接跃迁到“赛博朋克”!😫 标准化管理的“老大难”:你中了…

[megatron代码阅读] 2. TP和PP实现

megatron 源码阅读第二篇, 看了TP和PP的对应实现训练并行实现 TensorParallel 张量并行代码路径, 代码路径: megatron/core/tensor_parallel 主要包含Linear / VocabEmbedding / cross_entropy 三部分. Linear 参数初始化 如果是从checkpoint热启, perform_initialization需要打…

2024.2.6鲜花

初探牛顿迭代?推歌 《以恋结缘》 诚、意地の悪い神の所业か? 奇迹?縁?袂触合う不思议 花ひとひら揺れて 不意に宿ってた うなじ解いてく春风 戯れはそこそこに 恋手ほどきしてくだしゃんせ 汤気にほんのり頬染て 夜风に愿ふ …いざ!!蝶と舞ひ花となりて 衣を乱して祓いま…

megatron 2. TP和PP实现

megatron 源码阅读第二篇, 看了TP和PP的对应实现训练并行实现 TensorParallel 张量并行代码路径, 代码路径: megatron/core/tensor_parallel 主要包含Linear / VocabEmbedding / cross_entropy 三部分. Linear 参数初始化 如果是从checkpoint热启, perform_initialization需要打…

【Azure Policy】当Azure策略组中存在多个修正任务时候时的批量处理办法

问题描述 在分配一组策略中包含了很多修正任务时候,从门户上,只能选择一个修正任务执行。 如下图:是否有好的办法,执行全部的修正任务呢?问题解答 从Azure门户的设计来看,只能选择一个修正任务是设计使然。如果想批量执行全部的修正任务,需要使用PowerShell脚本来循环执…

Kotlin空安全

前言 访问空引用的成员变量就会导致空指针异常,在Java中被称作NullPointerException,简称NPE,Kotlin中NPE产生的原因只可能是以下几种:显式调用 throw NullPointerException()使用了!!操作符数据在初始化时不一致,例如:传递一个在构造函数中出现的未初始化的 this 并用于…

Kotlin控制流程

条件与循环 if表达式 Kotlin中的if与Java中的if大致上都差不多,但是Kotlin中没有三元运算符(A ? B : C),可以用if表达式作为代替,例如: Java int a = int a = System.currentTimeMillis() % 2 == 1L ? 1 : 0; Kotlin val a = if (System.currentTimeMillis() % 2 == 1L…

第一次用Markdown

标题 标题2 标题3 标题4 字体 字体 字体姓名 性别 年龄张三 男 20![das]() baidu