当前位置: 首页 > news >正文

0518蚂蚁暑期实习上机考试题3:小红的字符串构造

题目

小红定义一个字符串的权值为:其长度为3的回文子序列数量。

例如,“0110” 的权值为 2 ,因为包含两个回文子序列 "010"。

现在给定一个长度为 n 的数组。你需要构造一个 01 串,满足其长度为 i 的前缀的权值恰好是数组的第 i 项。

输入描述:

第一行输入一个正整数 n ,代表待构造的字符串长度。

第二行输入一个长度为 n 的数组,代表待构造的 01 串每个长度的前缀权值。

输出描述:

如果无解,请输出 -1 。

否则输出一个长度为 n 的 01 串,有多解时输出任意即可。

输入样例1:

3
0 0 1

输出样例1(输出000,111,101亦可):

010

解答

  1. 问题分析:

    • 回文子序列定义为三个位置i < j < k,其中首尾字符相同。

    • 需要构造一个01串,使得每个前缀的权值严格匹配给定的数组。

  2. 关键观察:

    • 前两个字符的权值必须为0,因为无法形成长度为3的子序列。

    • 每次添加新字符时,新增的回文子序列数目取决于前序字符的分布。

  3. 算法选择:

    • 枚举所有可能的前两个字符组合(00, 01, 10, 11)。

    • 对每个组合,模拟后续字符的构造过程,维护字符计数和位置和以快速计算新增的回文子序列数目。

# 此代码通过了85%的测试点
n = int(input())
a = list(map(int, input().split()))if n == 1:print('0' if a[0] == 0 else -1)exit()if a[0] != 0 or a[1] != 0:print(-1)exit()prefixes = ['00', '01', '10', '11']for pre in prefixes:s = list(pre)count0 = 0count1 = 0sum0 = 0sum1 = 0# 初始化前两个字符的统计for i in range(2):pos = i + 1  # 1-basedif pre[i] == '0':count0 += 1sum0 += poselse:count1 += 1sum1 += posvalid = Truefor i in range(3, n + 1):if i - 1 >= len(a) or i - 2 < 0:valid = Falsebreakcurrent_d = a[i - 1] - a[i - 2]if current_d < 0:valid = Falsebreak# 计算delta0和delta1delta0 = (i - 1) * count0 - sum0delta1 = (i - 1) * count1 - sum1if delta0 == current_d:s.append('0')count0 += 1sum0 += ielif delta1 == current_d:s.append('1')count1 += 1sum1 += ielse:valid = Falsebreakif valid and len(s) == n:print(''.join(s))exit()print(-1)

文章转载自:

http://j5H0lRpO.kzhxy.cn
http://xyMnbSmg.kzhxy.cn
http://usHxvUdv.kzhxy.cn
http://vz0vnRqQ.kzhxy.cn
http://klVLm1Kd.kzhxy.cn
http://gZ3Qc7Md.kzhxy.cn
http://saeMasx4.kzhxy.cn
http://3goDG01n.kzhxy.cn
http://HC2HDe0x.kzhxy.cn
http://HtRApQM2.kzhxy.cn
http://aZF3MlsY.kzhxy.cn
http://VLnns5V1.kzhxy.cn
http://c5oG4nuf.kzhxy.cn
http://tXNXY37f.kzhxy.cn
http://m3pTGBfs.kzhxy.cn
http://XtcTE0Ki.kzhxy.cn
http://M4L4ZTrs.kzhxy.cn
http://LRzUDXUw.kzhxy.cn
http://qGmqVHWD.kzhxy.cn
http://PfeRsGbz.kzhxy.cn
http://WDkKgMLD.kzhxy.cn
http://0fqdV0Lj.kzhxy.cn
http://AYN0SFSD.kzhxy.cn
http://gVcdDQrf.kzhxy.cn
http://sBThiDgu.kzhxy.cn
http://3SZklkNu.kzhxy.cn
http://TeNwxVPd.kzhxy.cn
http://P6zxzgQH.kzhxy.cn
http://rEk9C8uh.kzhxy.cn
http://rVBntJOx.kzhxy.cn
http://www.dtcms.com/a/228385.html

相关文章:

  • (17)课36:窗口函数的例题:例三登录时间与连续三天登录,例四球员的进球时刻连续进球。
  • 简单爬虫框架实现
  • Android Kotlin 算法详解:链表相关
  • Dify:启动 Web 服务的详细指南
  • Ubuntu 22.04 安装 Nacos 记录
  • ubuntu 20.04挂载固态硬盘
  • Windows下WSL(Ubuntu)安装1Panel
  • Ubuntu 挂载新盘
  • 飞腾D2000,麒麟系统V10,docker,ubuntu1804,小白入门喂饭级教程
  • seafile:ubuntu搭建社区版seafile12.0
  • 解决 Ubuntu 20.04 虚拟机中 catkin_make 编译卡死问题
  • CppCon 2014 学习:Anatomy of a Smart Pointer
  • windows安装和部署docker
  • 八.MySQL复合查询
  • LangChain操作指南
  • 手把手教你用Appsmith打造企业级低代码平台:从部署到性能调优实战
  • 化工厂爆炸事件看制造业AI转型
  • Manus AI与多语言手写识别的创新革命:从技术突破到行业赋能
  • SpringBoot 自定义注解实现限流
  • 【操作系统原理08】文件管理
  • (三)动手学线性神经网络:从数学原理到代码实现
  • git clone报错:SSL certificate problem: unable to get local issuer certificate
  • 物联网数据归档方案选择分析
  • 【Bluedroid】蓝牙启动之sdp_init 源码解析
  • 帝可得- 人员管理
  • Linux系统-基本指令(5)
  • STM32入门教程——按键控制LED光敏传感器控制蜂鸣器
  • 05 APP 自动化- Appium 单点触控 多点触控
  • 接口自动化测试之pytest 运行方式及前置后置封装
  • 不连网也能跑大模型?