Avito Cool Challenge 2018 F. Tricky Interactor(交互 构造)

题目

长为n(n<=300)的01串,初始情况下总共有t(t<=n)个1

你可以询问若干次,

当你询问的区间为[L,R]时,系统会等概率地从[L,n]和[1,R]里选取一个,

将区间的01翻转,翻转操作是可持久化的,即第i次的翻转会对第i+1次的询问生效

询问总次数要求不超过10000,

你需要在若干次询问后,输出原始的01串

特别地,当01串和询问序列顺序都固定的时候,系统随机的返回值序列也是固定的,

也就是说,不会出现ac代码重交wa了的情况

思路来源

乱搞AC

题解

官方题解比较复杂,这里是强行乱搞搞过去的,倒也没错,只是题解做得更优雅吧

搞过去了之后还看了一篇题解,感觉做法也挺好的

对于n=1的情况,直接输出答案即可

询问次数10000,串长300,所以每个位置可以问大概32次,

对于n>=2的情况,先问32次询问[2,n],这样[L,n]对应[2,n],[1,R]对应[1,n]

也就是[2,n]每次必翻,[1,1]有概率翻有概率不翻

这样翻32次,只取其中的偶数次来看,[2,n]一定不翻,[1,1]有概率翻,

试了16次,至少出现一次翻一次没翻的概率很高,那么

①如果b[1]一开始是1,总的1的个数是t,这16次只会出现t和t-1

②如果b[1]一开始是0,总的1的个数是t,这16次只会出现t和t+1,就求出了b[1]

后面求每位的情况也是类似,具体来说,

计[1,i-1]的1的个数为pre,当前无法确定第i位是什么,但是已知[i,n]的个数为suf

①如果b[i]一开始是1,那么翻之前为pre+suf,翻了[1,i]之后,总的1的个数为i-(pre+1)+suf-1

②如果b[i]一开始是0,那么翻之前为pre+suf,翻了[1,i]之后,总的1的个数为i-pre+suf

也就是询问的两种结果,一种结果一定是t,根据另一种结果是什么,去判断b[i]初始的值是什么

但是,这种情况下,需要保证pre和初始局面情况下前缀的1的个数相等,

所以,如果询问了32次后,[1,i]中1的个数pre和后缀个数suf之和(即a[32])与t的个数不等,

说明前缀被翻了,这个时候应该不断重试两次直至总和为t,

也就是,保证后缀没翻的情况下,前缀再被翻回来

而对于前缀01个数情况相等的情况,不会影响上面的两个式子的值,不会影响第i位初始的答案

插曲

一开始写的是固定下来询问[i,n]的次数,然后只用第偶数次的结果

询问16次wa3,24次wa9,30次wa86,32次超次数上限,

后来改成偶数次数、奇数次数的结果(奇数次数的时候[i,n]一定被翻)一起考虑,

此时,询问30次时,还是wa86

最后,加了一个剪枝,也就是,对于当前[i,n]偶数次的询问,

如果已经问出了两种不同的值就break,然后就ac了

最后,看了下ac链接里各样例的询问次数,

把询问10000次降到了4000次, 真·纯纯期望次数

心得

一开始学弟提了一个询问[1,i]32次的方法,

也是先询问[1,1],[1,2],...,直到[1,n]

但是这个做法有个问题,由于后缀是未求出的,并且有概率翻转

那么,如果询问[1,i]的时候,[i+1,n]中01的个数相同,就无法区别是否翻转,

也就是有了后效性,所以被否掉了,想了一下怎么修

于是,把翻前缀改成翻后缀,也就是把已经求出来的翻了,

这样前缀01个数相等的时候,并不会影响没求的数的正确性,因为没求的数没有翻过

并且能够根据前缀和后缀的1的个数推出,也就有了上面的做法

Another Solution

https://www.cnblogs.com/Kobe303/p/16749590.html

代码

#include<bits/stdc++.h>
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,int> 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 scll(a) scanf("%lld",&(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=305,M=33;
int n,t,a[M],b[N];
char ans[N];
int ask(int l,int r){printf("? %d %d\n",l,r);fflush(stdout);int v;scanf("%d",&v);return v;
}
void out(){rep(i,1,n)ans[i]=b[i]+'0';ans[n+1]='\0';printf("! %s",ans+1);fflush(stdout);
}
void sol(){sci(n),sci(t);int pre=0,suf=t;rep(i,1,n-1){int mn=n,mx=0,lasj=0;rep(j,1,32){a[j]=ask(i+1,n);if(j%2==0){mn=min(mn,a[j]);mx=max(mx,a[j]);if(mn!=mx){lasj=j;break;}}}int now=a[lasj];while(now!=t)now=ask(i+1,n),now=ask(i+1,n);int one=i-1-pre+suf-1;// zero=i-1-pre+suf+1;if(one==(mn^mx^t))b[i]=1;else b[i]=0;//printf("mn:%d mx:%d mn^mx^t:%d one:%d zero:%d b:%d\n",mn,mx,mn^mx^t,one,zero,b[i]);pre+=b[i];suf-=b[i];}b[n]=suf;out();
}
int main(){sol();return 0;
}

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

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

相关文章

CentOS 中启动 Jar 包

在 CentOS 中启动一个 Jar 包&#xff0c;可以通过 java 命令来实现。具体步骤如下&#xff1a; 确认 Java 环境已经安装并配置好了。 打开终端或者 SSH 连接到 CentOS 服务器。 执行以下命令启动 Jar 包&#xff1a; 复制插入 java -jar /path/to/your/jar/file.jar复制插…

file2Udp增量日志转出Udp简介

https://gitee.com/tianjingle/file2udp 很多时候服务产生的日志需要进行汇总&#xff0c;这种统一日志处理的方式有elb&#xff0c;而且很多日志组件也支持日志转出的能力。但是从广义上来说是定制化的&#xff0c;我们需要一个小工具实现tail -f的能力&#xff0c;将增量日志…

U-Mail邮件中继有效解决海外邮件发送不畅难题

相信不少企业都经历过类似的问题&#xff0c;在跟国外客户发送电子邮件的过程中&#xff0c;经常会遇到邮件发不过去、邮件隔了很久对方才收到&#xff0c;或者是邮件退信等情况出现。对此&#xff0c;U-Mail技术专家李工解释到&#xff0c;导致海外通邮不畅主要有以下三个原因…

ADFS 高可用配置 + NLB配置(Windows网络负载均衡)

ADFS 高可用配置 NLB配置&#xff08;Windows网络负载均衡&#xff09; ADFS安装配置NLB配置节点 TEST-ADFS-01 网络负载平衡配置节点 TEST-ADFS-02 网络负载平衡修改CRM配置 ADFS实现高可用负载均衡有两种&#xff0c;主要是在数据库的选择方式&#xff1a; windows自带的内…

2023.11.11通过html内置“required-star“添加一个红色的星号来表示必填项

2023.11.11通过html内置"required-star"添加一个红色的星号来表示必填项 在HTML中&#xff0c;可以使用标签来为元素添加说明。同时可以通过添加一个红色的星号来表示必填项。 <!DOCTYPE html> <html lang"en"> <head><meta charse…

fundamental notes in 3D math

平面方程 a x b y c z d axbycz d axbyczd, 法向量 a , b , c a,b,c a,b,c, 点到平面的距离为 d / s q r t ( a 2 b 2 c 2 ) d / sqrt(a^2 b^2 c^2) d/sqrt(a2b2c2) , 距离可为正, 为负, 为正表示跟法向量方向一致, 为负表示相反 点 ( x o , y o , z o ) (x_o, y_o, z…

Python中的数据增强技术

使用imgaug快速观察Python中的数据增强技术 在本文中&#xff0c;我们将使用imgaug库来探索Python中不同的数据增强技术 什么是图像增强 图像增强是一种强大的技术&#xff0c;用于在现有图像中人为地创建变化以扩展图像数据集。这是通过应用不同的变换技术来实现的&#xf…

EXTI (2)

增强版实验简介 EXTI5和EXTI9共享一个中断源 下面的类似 EXTI0到4各自拥有一个中断源 改变引脚 PA0和PA1改变为PA5 和PA6 EXTI的重映射 之前是把PA0映射到EXTI0 PA1映射到EXTI1上 现在是要把PA5和PA6分别映射到EXTI5和6上 EXTI进行初始化 NVIC初始化 编写中断函数 因为EXTI…

Flutter.源码分析.flutter/packages/flutter/lib/src/widgets/scroll_view.dart/ListView

Flutter.源码分析 ListView flutter/packages/flutter/lib/src/widgets/scroll_view.dart/ListView 李俊才&#xff08;jcLee95&#xff09; 的个人博客&#xff1a;https://blog.csdn.net/qq_28550263 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/detail…

如何在电脑和手机设备上编辑只读 PDF

我们大多数人更喜欢以 PDF 格式共享和查看文件&#xff0c;因为它更专业、更便携。但是&#xff0c;通常情况下您被拒绝访问除查看之外的内容编辑、复制或评论。如果您希望更好地控制您的 PDF 或更灵活地编辑它&#xff0c;请弄清楚为什么您的 PDF 是只读的&#xff0c;然后使用…

STM32常见符号解释定义(持续更新)

什么是FIFO&#xff1f; FIFO是一种先进先出的数据结构&#xff0c;全称为First In First Out&#xff0c;即先进先出。在计算机中&#xff0c;FIFO通常用于缓存和队列中&#xff0c;它可以确保先进入队列的数据先被处理&#xff0c;后进入队列的数据后被处理。在硬件电路…

无监督学习的集成方法:相似性矩阵的聚类

在机器学习中&#xff0c;术语Ensemble指的是并行组合多个模型&#xff0c;这个想法是利用群体的智慧&#xff0c;在给出的最终答案上形成更好的共识。 这种类型的方法已经在监督学习领域得到了广泛的研究和应用&#xff0c;特别是在分类问题上&#xff0c;像RandomForest这样…

解决npm报错Error: error:0308010C:digital envelope routines::unsupported

解决npm报错Error: error:0308010C:digital envelope routines::unsupported。 解决办法&#xff1b;终端执行以下命令&#xff08;windows&#xff09;&#xff1a; set NODE_OPTIONS--openssl-legacy-provider然后再执行 npm命令成功&#xff1a;

使用dgl库实现GCN【官方案例】

学习目的 学习使用gnn进行节点分类的基本工作流程&#xff0c;即预测图中节点的类别。 关于GCN节点分类的综述 在图数据上最流行和广泛采用的任务之一是节点分类&#xff0c;其中模型需要预测每个节点的真实类别。 在图神经网络之前&#xff0c;许多被提出的方法要么单独使用…

Spark3.0中的AOE、DPP和Hint增强

1 Spark3.0 AQE Spark 在 3.0 版本推出了 AQE&#xff08;Adaptive Query Execution&#xff09;&#xff0c;即自适应查询执行。AQE 是 Spark SQL 的一种动态优化机制&#xff0c;在运行时&#xff0c;每当 Shuffle Map 阶段执行完毕&#xff0c;AQE 都会结合这个阶段的统计信…

【KVM-7】KVM管理工具

前言 大家好&#xff0c;我是秋意零。 &#x1f47f; 简介 &#x1f3e0; 个人主页&#xff1a; 秋意零&#x1f525; 账号&#xff1a;全平台同名&#xff0c; 秋意零 账号创作者、 云社区 创建者&#x1f9d1; 个人介绍&#xff1a;在校期间参与众多云计算相关比赛&#x…

微信小程序广告banner、滚动屏怎么做?

使用滑块视图容器swiper和swiper-item可以制作滚动屏&#xff0c;代码如下&#xff1a; wxml: <swiper indicator-dots indicator-color"rgba(255,255,255,0.5)" indicator-active-color"white" autoplay interval"3000"><swiper-ite…

【人工智能Ⅰ】6-机器学习之分类

【人工智能Ⅰ】6-机器学习之分类 6-1 机器学习在人工智能中的地位 学习能力是智能的本质 人工智能 > 机器学习 > 深度学习 什么是机器学习&#xff1f; baidu&#xff1a;多领域交叉学科&#xff08;做什么&#xff09; wiki&#xff1a;the study of algorithms and…

OpenCV踩坑笔记使用笔记入门笔记整合SpringBoot笔记大全

springboot开启摄像头抓拍照片并上传实现&问题记录 NotAllowedErrot: 请求的媒体源不能使用&#xff0c;以下情况会返回该错误: 当前页面内容不安全&#xff0c;没有使用HTTPS没有通过用户授权NotFoundError: 没有找到指定的媒体通道NoReadableError: 访问硬件设备出错Ov…

计算机基础知识50

数据的增删改查(insert update delete select) # 用户列表的展示&#xff1a; # 把数据表中得用户数据都给查询出来展示在页面上 1. 查询 from app01 import models models.UserInfo.objects.all() # 查询所有的字段信息和数据 resmodels.UserInfo.objects.first() # 查询…