当前位置: 首页 > 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://www.lqws.cn/news/112339.html

相关文章:

  • 基于netmiko模块实现支持SSH or Telnet的多线程多厂商网络设备自动化巡检脚本
  • 采摘机器人项目
  • 北京大学肖臻老师《区块链技术与应用》公开课:07-BTC-挖矿难度
  • 【学习笔记】深度学习-过拟合解决方案
  • 光伏功率预测新突破:TCN-ECANet-GRU混合模型详解与复现
  • 前端(vue)学习笔记(CLASS 7):vuex
  • C++学者给您讲数学之——数列
  • 【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(1)——Chat Client API
  • Leetcode-7 寻找用户推荐人
  • C++中锁与原子操作的区别及取舍策略
  • 深入理解 JSX:React 的核心语法
  • JSON to Excel 3.0.0 版本发布 - 从Excel插件到Web应用的转变
  • 手撕HashMap!(JDK7版本)
  • 张雪峰为9岁女儿申请40个左右商标!
  • java反序列化:CC5利用链解析
  • Python应用continue关键字初解
  • Python数据分析及可视化中常用的6个库及函数(二)
  • BGP/MPLS IP VPN跨域解决方案
  • 《Pytorch深度学习实践》ch5-Logistic回归
  • ollama的安装及加速下载技巧
  • VBA模拟进度条
  • 缩量和放量指的是什么?
  • 二叉树(二)
  • Windows应用-音视频捕获
  • 嵌入式SDK技术EasyRTC音视频实时通话助力即时通信社交/教育等多场景创新应用
  • Win11系统不推送24H2/西数SSD无法安装24H2 - 解决方案
  • 6.4 note
  • 【请关注】VC内存泄露的排除及处理
  • 数据加密标准(DES)解析及代码实现(java)
  • 解决Vditor加载Markdown网页很慢的问题(Vite+JS+Vditor)