当前位置: 首页 > 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.jsqmd.com/news/704682/

相关文章:

  • 5分钟快速上手:用Arcade-plus制作你的第一个Arcaea谱面![特殊字符]
  • 嘎嘎降AI和PaperRR哪个更适合英文论文:2026年Turnitin检测对比 - 还在做实验的师兄
  • Venera漫画源自动更新终极指南:5分钟掌握智能同步技术
  • 深入浅出 Kubernetes 网络【20260426-002篇】
  • ANSYS WORKBENCH轴承动力学仿真:内外圈及故障特征频率振动加速度模拟研究
  • 终极开源电视浏览器:TV Bro重构大屏浏览新体验
  • Python解析Excel:从入门到实战
  • 独立开发日志:把 GPS 轨迹换算成「踩过的面积」,我删了三次代码才勉强做对
  • 嘎嘎降AI和去AIGC哪个更适合理工科论文:2026年实测数据完整对比 - 还在做实验的师兄
  • 基于Verilog语言的FPGA密码锁工程:通过矩阵键盘实现密码修改与开锁(包含Quartus...
  • 淘宝API错误码处理大全:常见27种错误码的应对策略
  • AutoDock-Vina实战指南:从分子对接新手到专业研究者的3个关键步骤
  • Refined Now Playing:网易云音乐美化插件终极指南,打造沉浸式播放体验
  • Linux线程同步与互斥(五):线程池的全面实现
  • 如何用Umi-OCR告别截图文字手打?离线OCR的5个效率倍增技巧
  • 比较能源系统优化调度的深度强化学习算法:DDPG、TD3、SAC和PPO的性能与可行性
  • 多模态传感器自动校准技术解析与应用实践
  • 深入浅出 Kubernetes 网络【20260426-003篇】
  • 5分钟掌握EB Garamond 12:免费商用复古字体终极指南
  • 【OpenClaw养虾】从零开始部署安装,接入机器人
  • 使用 Operator 框架管理有状态应用
  • 3步搞定Windows风扇控制:FanControl让你的电脑散热更智能
  • Boot Camp驱动自动化革命:Brigadier如何将45分钟部署压缩至5分钟
  • 2026年3月商标购买网站哪里有,购买注册商标/商标注册购买/闲置商标转让/注册商标转让,商标购买渠道哪家靠谱 - 品牌推荐师
  • 如何用Umi-OCR快速提取截图文字:从新手到高手的完整指南
  • AI代码执行沙箱从POC到生产环境的生死7步(附Gartner评估矩阵与内部审计检查表)
  • 如何一次性解决所有Visual C++运行库问题:终极修复指南
  • 如何高效修复损坏视频:Untrunc完整实用指南
  • 网页隐性载荷滥用,催生 AI 助手全新攻击范式
  • Qt之状态机 - scrutiny