奇怪的乱搞做法(?

首先我们枚举序列的每一个位置,从这个位置劈开,假设这个位置是 \(i\),那么按照题意模拟,我们能够构造一个最终序列有 \(i\) 个 L 和 \(n-i\) 个 R 的符合题意的序列。

于是我们枚举所有位置,这样就有了 \(O(n^2)\) 暴力,能够在考场上拿到 65pts,性价比相当高。

然后思考正解。

我们对着样例输出可行的位置,发现这个位置的值和整个序列的第一个值一样。于是我们找到这个位置来做这个暴力,能够在洛谷数据获得 92 分的高分。

再思考一下,我们应该还要找一个位置,并且这个位置的值和整个序列的最后一个位置的值相同。

然后这题就被草过去了。。。

如果有老哥知道正确性的在麻烦评论区补充一下(

#include<algorithm>
#include<cstdio>
typedef unsigned ui;
const int M=1e6+5,mod=1e9+7;
int n,T,a[M];ui p[M],ip[M],hash[M];
ui l[M],r[M];int top,stk[M];char ans[M],s[M];bool f,vis[M];
int L,R;
inline ui Hash(const int&L,const int&R){
return 1ull*(hash[R]-hash[L]+mod)*ip[L]%mod;
}
inline bool check(const int&L,const int&R){
int i,h1(0),h2(0),tp;
for(tp=0,i=L;i<=R;++i)if(!vis[i])h1=(h1+1ull*a[i]*p[++tp])%mod;
for(tp=0,i=R;i>=L;--i)if(!vis[i])h2=(h2+1ull*a[i]*p[++tp])%mod;
return h1==h2;
}
inline void end(){
if(f){
for(int i=1;i<=n;++i){
if(s[i]<ans[i]){
for(i=1;i<=n;++i)ans[i]=s[i];
}
if(s[i]>ans[i])break;
}
}
else{
f=true;for(int i=1;i<=n;++i)ans[i]=s[i];
}
}
inline bool todo(int L1,int R1,int L2,int R2){
if(Hash(L1,R1)==Hash(L2,R2)){
R1-=L1-1;while(R1--)s[++L]='L';
R2-=L2-1;while(R2--)s[R--]='R';
return end(),true;
}
return false;
}
inline void make(int L1,int R1,int L2,int R2){
int i,pL1,pR1,pL2,pR2;L=0;R=n;
while(true){
pL1=L1;pR1=R1;pL2=L2;pR2=R2;if(todo(L1,R1,L2,R2))return end();
for(i=1;L1+i-1<=R1&&L1+i-1<R1-i+1;++i)if(a[L1+i-1]^a[R1-i+1])break;
if(i^1){
while(--i)s[++L]='L',s[R--]='L',++L1,--R1;if(todo(L1,R1,L2,R2))return end();
if(R1+1==L1&&R2+1==L2)return end();continue;
}
for(i=1;L1+i-1<=R1&&L2+i-1<=R2&&L1;++i)if(a[L1+i-1]^a[L2+i-1])break;
if(i^1){
while(--i)s[++L]='L',s[R--]='R',++L1,++L2;if(todo(L1,R1,L2,R2))return end();
if(R1+1==L1&&R2+1==L2)return end();continue;
}
for(i=1;L2+i-1<=R2&&L2+i-1<R2-i+1;++i)if(a[L2+i-1]^a[R2-i+1])break;
if(i^1){
while(--i)s[++L]='R',s[R--]='R',++L2,--R2;if(todo(L1,R1,L2,R2))return end();
if(R1+1==L1&&R2+1==L2)return end();continue;
}
for(i=1;L1+i-1<=R1&&L2+i-1<=R2;++i)if(a[R1-i+1]^a[R2-i+1])break;
if(i^1){
while(--i)s[++L]='R',s[R--]='L',--R1,--R2;if(todo(L1,R1,L2,R2))return end();
if(R1+1==L1&&R2+1==L2)return end();continue;
}
if(L1==pL1&&R1==pR1&&L2==pL2&&R2==pR2)return;
}
}
signed main(){
// freopen("palin.in","r",stdin);
// freopen("palin.out","w",stdout);
int i;scanf("%d",&T);p[0]=ip[0]=1;p[1]=13331;ip[1]=133822550;
for(i=2;i<=500000;++i)p[i]=13331ull*p[i-1]%mod,ip[i]=133822550ull*ip[i-1]%mod;
while(T--){
scanf("%d",&n);n<<=1;f=false;
for(i=1;i<=n;++i)scanf("%d",a+i);
for(i=1;i<=n;++i)hash[i]=(hash[i-1]+1ull*p[i]*a[i])%mod;
for(i=2;i<=n;++i)if(a[i]==a[1])break;
for(int j=-1;j<=1;++j)if(i+j>=1&&i+j<=n)make(1,i+j,i+j+1,n);
for(i=1;i<=n-1;++i)if(a[i]==a[n])break;
for(int j=-1;j<=1;++j)if(i+j>=1&&i+j<=n)make(1,i+j,i+j+1,n);
ans[n]='L';
if(!f)printf("-1\n");
else{
for(i=1;i<=n;++i)printf("%c",ans[i]);printf("\n");
}
}
}

LGP7915题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. Struts2中的过滤器

    过滤器:            过滤器可以处理用户的请求和程序响应的内容,可用于权限控制.编码转换的场合.过滤器是servlet规范中的一部分,不是只有Struts2有. 使用过滤器之前你得定义一个过 ...

  2. sublime中的emmet插件的使用技巧

    1.我要生成一个2行3列,宽300px,高500px的表. table[width=300 height=500]>(tr>td{$}*3)*2

  3. maven转web项目时 在Project Facets下转换时 Further configuration available没有出现

    如果下边的 further configuration available不出来 把Dynamic web module 去掉勾选,应用与项目,然后再点开项目的properties,再选中Dynami ...

  4. UITextView模拟UITextField 设置Placeholder属性 --董鑫

    由于最近有用到输入框,刚开始考虑的是UITextField,因为它在没有输入的时候可以有提示的Placeholder更能,很人性化,但UITextField只能单行输入,不能跳行,对于一些强迫症的亲来 ...

  5. Spark算子 - aggregateByKey

    释义 aggregateByKey逻辑类似 aggregate,但 aggregateByKey针对的是PairRDD,即键值对 RDD,所以返回结果也是 PairRDD,结果形式为:(各个Key, ...

  6. Linux重定向输出到以当前时间命名的文件 / date命令格式化输出

    1. 利用date命令重定向到以当前时间命名的文件 例如: ls -l > mylog_$(date +"%Y-%m-%d_%H-%M-%S").log 或: ls -l & ...

  7. 稳过!华为微认证ModelArts实现智能花卉识别稳过!

    华为微认证ModelArts实现智能花卉识别稳过! 目录 华为微认证ModelArts实现智能花卉识别稳过! ModelArts实现智能花卉识别的概述 ModelArts实现智能花卉识别的解决方案 M ...

  8. IT职业技能图谱:架构师、H5、DBA、移动、大数据、运维...

    转载 作者:StuQ 文章收藏自微信:InfoQ   时隔近5个月,StuQ的小伙伴们再次出品了IT职业技能图谱更新版.这回除更新之前版本外,还添加了架构师.HTML 5.DBA等新的职业技能图谱.正 ...

  9. Mysql的基本操作知识

    顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了.  笔记链接:http://p ...

  10. opencv笔记--Active contours

    Active Contours 也称作 Snake,通过定义封闭区域曲线的能量函数,并使其最小化得到最终曲线. Active Contours 被用作物体边界精确定位上,opencv 给出了一个实现, ...