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

打卡信奥刷题(3170)用C++实现信奥题 P7915 [CSP-S 2021] 回文

P7915 [CSP-S 2021] 回文

题目描述

给定正整数n nn和整数序列a 1 , a 2 , … , a 2 n a_1, a_2, \ldots, a_{2 n}a1,a2,,a2n,在这2 n 2 n2n个数中,1 , 2 , … , n 1, 2, \ldots, n1,2,,n分别各出现恰好2 22次。现在进行2 n 2 n2n次操作,目标是创建一个长度同样为2 n 2 n2n的序列b 1 , b 2 , … , b 2 n b_1, b_2, \ldots, b_{2 n}b1,b2,,b2n,初始时b bb为空序列,每次可以进行以下两种操作之一:

  1. 将序列a aa的开头元素加到b bb的末尾,并从a aa中移除。
  2. 将序列a aa的末尾元素加到b bb的末尾,并从a aa中移除。

我们的目的是让b bb成为一个回文数列,即令其满足对所有1 ≤ i ≤ n 1 \le i \le n1in,有b i = b 2 n + 1 − i b_i = b_{2 n + 1 - i}bi=b2n+1i。请你判断该目的是否能达成,如果可以,请输出字典序最小的操作方案,具体在【输出格式】中说明。

输入格式

每个测试点包含多组测试数据。

输入的第一行,包含一个整数T TT,表示测试数据的组数。对于每组测试数据:

第一行,包含一个正整数n nn
第二行,包含2 n 2 n2n个用空格隔开的整数a 1 , a 2 , … , a 2 n a_1, a_2, \ldots, a_{2 n}a1,a2,,a2n

输出格式

对每组测试数据输出一行答案。

如果无法生成出回文数列,输出一行-1,否则输出一行一个长度为2 n 2 n2n的、由字符LR构成的字符串(不含空格),其中L表示移除开头元素的操作 1,R表示操作 2。

你需要输出所有方案对应的字符串中字典序最小的一个。

字典序的比较规则如下:长度均为2 n 2 n2n的字符串s 1 ∼ 2 n s_{1 \sim 2 n}s12nt 1 ∼ 2 n t_{1 \sim 2 n}t12n字典序小,当且仅当存在下标1 ≤ k ≤ 2 n 1 \le k \le 2 n1k2n使得对于每个1 ≤ i < k 1 \le i < k1i<ks i = t i s_i = t_isi=tis k < t k s_k < t_ksk<tk

输入输出样例 #1

输入 #1

2 5 4 1 2 4 5 3 1 2 3 5 3 3 2 1 2 1 3

输出 #1

LRRLLRRRRL -1

输入输出样例 #2

输入 #2

见附件中的 palin/palin2.in

输出 #2

见附件中的 palin/palin2.ans

说明/提示

【样例解释 #1】

在第一组数据中,生成的的b bb数列是[ 4 , 5 , 3 , 1 , 2 , 2 , 1 , 3 , 5 , 4 ] [4, 5, 3, 1, 2, 2, 1, 3, 5, 4][4,5,3,1,2,2,1,3,5,4],可以看出这是一个回文数列。

另一种可能的操作方案是LRRLLRRRRR,但比答案方案的字典序要大。

【数据范围】

∑ n \sum nn表示所有T TT组测试数据中n nn的和。

对所有测试点保证1 ≤ T ≤ 100 1 \le T \le 1001T1001 ≤ n , ∑ n ≤ 5 × 10 5 1 \le n, \sum n \le 5 \times {10}^51n,n5×105

测试点编号T ≤ T \leTn ≤ n \len∑ n ≤ \sum n \len特殊性质
1 ∼ 7 1 \sim 71710 101010 101050 5050
8 ∼ 10 8 \sim 10810100 10010020 20201000 10001000
11 ∼ 12 11 \sim 121112100 100100100 1001001000 10001000
13 ∼ 15 13 \sim 151315100 1001001000 1000100025000 2500025000
16 ∼ 17 16 \sim 1716171 115 × 10 5 5 \times {10}^55×1055 × 10 5 5 \times {10}^55×105
18 ∼ 20 18 \sim 201820100 1001005 × 10 5 5 \times {10}^55×1055 × 10 5 5 \times {10}^55×105
21 ∼ 25 21 \sim 252125100 1001005 × 10 5 5 \times {10}^55×1055 × 10 5 5 \times {10}^55×105

特殊性质:如果我们每次删除a aa中两个相邻且相等的数,存在一种方式将序列删空(例如a = [ 1 , 2 , 2 , 1 ] a = [1, 2, 2, 1]a=[1,2,2,1])。

【hack 数据提供】
@潜在了H2O下面。

C++实现

#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintmo=1e9+7;inlineintread(){charch=getchar();intx=0,f=1;while(!isdigit(ch))f=(ch=='-'?-1:f),ch=getchar();while(isdigit(ch))x=(x<<3)+(x<<1)+ch-'0',ch=getchar();returnx*f;}constintN=5e5+5;intn,L[N],R[N],a[2*N],b[2*N];charans[2*N];booldoit(intlst,intLi,intRi){if(Li==2)ans[1]='L';elseans[1]='R';intl=lst,r=lst,st=2,ed=2*n-1;for(inti=1;i<n;i++){if(R[a[Li]]==l-1)l--,Li++,ans[st++]='L',ans[ed--]='L';elseif(R[a[Li]]==r+1)r++,Li++,ans[st++]='L',ans[ed--]='R';elseif(L[a[Ri]]==l-1)l--,Ri--,ans[st++]='R',ans[ed--]='L';elseif(L[a[Ri]]==r+1)r++,Ri--,ans[st++]='R',ans[ed--]='R';elsereturn0;}ans[2*n]='L';printf("%s\n",ans+1);return1;}voidsolve(){memset(L,0,sizeof(L));memset(R,0,sizeof(R));memset(b,0,sizeof(0));memset(ans,0,sizeof(ans));n=read();for(inti=1;i<=2*n;i++)a[i]=read(),L[a[i]]?R[a[i]]=i:L[a[i]]=i;if(doit(R[a[1]],2,2*n))return;if(doit(L[a[2*n]],1,2*n-1))return;puts("-1");return;}signedmain(){intT=read();while(T--)solve();return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.cnnetsun.cn/news/2103353.html

相关文章:

  • 从STM32转战GD32?KEIL工程迁移避坑指南(以F103C8T6为例,解决启动文件、宏定义差异)
  • 校园资讯平台系统|基于java和小程序的校园资讯平台设计与实现(源码+数据库+文档)
  • 废物利用指南:把移动融合终端H10G-13AC刷成电视盒子+轻NAS(晶晨S905L3S通刷包实战)
  • 如何快速配置象棋AI:深度学习辅助的完整指南
  • 5分钟掌握EB Garamond 12:免费商用复古字体终极指南
  • 终极编程语言图标资源库:告别技术文档的视觉混乱时代
  • flutter
  • qmc-decoder终极指南:如何快速解锁QQ音乐加密音频文件?
  • 怎样高效解密网易云NCM音乐文件:ncmdumpGUI完全实用指南
  • 布隆过滤器(Bloom Filter)技术详解
  • eternal_silence
  • 基于向量数据库与强化学习的智能体框架开发实战
  • 自动驾驶算法岗必备:手把手教你优化C++角度归一化代码(从Apollo源码说起)
  • AI模型调试总“污染”宿主机?手把手配置Docker Sandbox实现进程/网络/文件系统三重隔离(含strace验证脚本)
  • 终极解密:MS-DOS源代码如何塑造现代操作系统架构
  • MCP 2026量子计算节点对接全链路解析(从经典控制面握手到量子态保真度校验的11层协议穿透)
  • 3000+免费科研矢量图标库:Bioicons如何彻底改变你的科学可视化工作流?
  • AdaBoost算法原理与实践:从基础到优化
  • RAG评估框架解析:提升检索增强生成系统质量
  • BitNet-b1.58-2B-4T-GGUF 赋能C语言学习:解释复杂指针与内存管理概念
  • 如何快速掌握Dell G15散热控制:轻量级开源方案完全指南
  • 如何解决Amlogic S9xxx设备Armbian启动问题:3个获取历史版本镜像的实用方法
  • 如何在三大操作系统上高效配置Ryujinx Switch模拟器:技术实现与性能优化指南
  • 5分钟终极指南:如何用Translumo打造你的Windows屏幕实时翻译神器
  • 终极指南:5分钟用ChanlunX实现专业级缠论分析可视化
  • Mem Reduct:基于Native API的Windows内存管理技术深度解析
  • VS Code Copilot Next 自动化工作流配置:为什么你的“/test”指令不触发单元生成?深度逆向分析Prompt Router 路由规则与Editor State 快照机制
  • 如何快速掌握DSGE建模:宏观经济研究的终极开源模型库指南
  • wxauto微信自动化:5个真实场景解决你的微信管理痛点
  • Unity透明窗口终极实战:从零打造桌面悬浮神器完整指南