「CSP-S 2019」括号树
【题目描述】
传送门
【题解】
- 是时候讨论一下我在考场上是怎么将这道题写挂的了
- 初看这道题毫无思路,先看看部分分吧
- 一条链的情况?设k[i]表示前i个括号的方案数
- 显然\(k[i]=k[i-1]+\)以i结尾的合法子串个数
- 考虑求\(a[i]\)表示以\(i\)结尾的合法子串个数,显然如果第\(i\)个字符是\(‘('\),\(a[i]=0\)
- 否则,看第\(i-1\)个字符,如果是\(‘(’\),则\(a[i]=a[i-2]\),否则就跳到与\(i-1\)匹配的\(b[i-1]\)处看\(b[i-1]-1\)是否是\('('\),如果不是,就再往前匹配······依次类推即可
- 然而,我在考场上时,居然脑抽,只往前匹配了一次,并且就这样还通过了大样例···
//惨痛回忆
//d[i]=1表示是左括号,=-1表示是右括号
for(int i=1;i<=n;++i){
if(d[i]==1){
k[i]=k[i-1];
continue;
}
if(i==1) continue;
if(d[i-1]==1){
b[i]=i-1;
a[i]=a[i-2]+1;
}
else if(d[b[i-1]-1]==1) a[i]=a[b[i-1]-2]+1,b[i]=b[i-1]-1;
k[i]=k[i-1]+a[i];
}
//正解
for(int i=1;i<=n;++i){
if(d[i]==1){
k[i]=k[i-1];
continue;
}
if(i==1) continue;
int now=i-1;
while(d[now]!=1&&now)
now=b[now]-1;
if(now){
a[i]=a[now-1]+1;
b[i]=now;
}
k[i]=k[i-1]+a[i];
}
- 正解,则只需要将链中通过-1向前推改为通过父子关系推即可
【代码】
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5e5+10;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
int n,d[N],fa[N],a[N],b[N],k[N],ans;
signed main(){
n=read();
for(int i=1;i<=n;i++){
char ch=getchar();
while(ch!='('&&ch!=')') ch=getchar();
if(ch=='(') d[i]=1;
else d[i]=-1;
}
for(int i=2;i<=n;i++)
fa[i]=read();
for(int i=1;i<=n;i++){
if(i==1) continue;
if(d[i]==1) k[i]=k[fa[i]];
else{
int now=fa[i];
while(d[now]!=1&&now)
now=fa[b[now]];
if(now){
a[i]=a[fa[now]]+1;
b[i]=now;
}
k[i]=k[fa[i]]+a[i];
}
ans=ans^(i*k[i]);
}
cout<<ans<<endl;
return 0;
}
「CSP-S 2019」括号树的更多相关文章
- 上午小测3 T1 括号序列 && luogu P5658 [CSP/S 2019 D1T2] 括号树 题解
前 言: 一直很想写这道括号树..毕竟是在去年折磨了我4个小时的题.... 上午小测3 T1 括号序列 前言: 原来这题是个dp啊...这几天出了好几道dp,我都没看出来,我竟然折磨菜. 考试的时候先 ...
- 「WC 2019」数树
「WC 2019」数树 一道涨姿势的EGF好题,官方题解我并没有完全看懂,尝试用指数型生成函数和组合意义的角度推了一波.考场上只得了 44 分也暴露了我在数数的一些基本套路上的不足,后面的 \(\ex ...
- 【题解】#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT)
[题解]#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT) 之前做这道题不理解,有一点走火入魔了,甚至想要一本近世代数来看,然后通过人类智慧思考后发现, ...
- loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分
$ \color{#0066ff}{ 题目描述 }$ 「Hanabi, hanabi--」 一听说祭典上没有烟火,Karen 一脸沮丧. 「有的哦-- 虽然比不上大型烟花就是了.」 还好 Shinob ...
- Luogu P5103 「JOI 2016 Final」断层 树状数组or线段树+脑子
太神仙了这题... 原来的地面上升,可以倒着操作(时光倒流),转化为地面沉降,最后的答案就是每个点的深度. 下面的1,2操作均定义为向下沉降(与原题意的变换相反): 首先这个题目只会操作前缀和后缀,并 ...
- 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组
题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...
- CSP-S 2019 D1T2 括号树
题目链接:[https://www.luogu.com.cn/problem/P5658] 思路: 这道题不难.(为什么我在考场上一点思路也没有??) 假设我们已经处理到树上的节点u(假设1为根节点) ...
- 「LOJ 3153」 「JOI Open 2019」三级跳
题面 LOJ 3153 solution 对于任意一对\(A,B\),若区间\([A,B]\)中存在一个数权值大于\(A\)或\(B\),则用这个数来替代\(A\)或\(B\)显然更优. 故只需要考虑 ...
- Solution -「NOI 2020」「洛谷 P6776」超现实树
\(\mathcal{Description}\) Link. 对于非空二叉树 \(T\),定义 \(\operatorname{grow}(T)\) 为所有能通过若干次"替换 \( ...
随机推荐
- Nexus3常用功能备忘
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Linux中文件与目录的区别
普通文件:存储普通数据,一般就是字符串. 目录文件:存储了一张表,该表就是该目录文件下,所有文件名和索引(inode)的映射关系. 通常父目录会存储有它目录下文件的索引映射,说白了就是一张对应关系的索 ...
- Jenkins 凭证管理 - 看这一篇就够了~
目录 Credential 类型 Credential 安全 Credential 创建 Credential ID 定义 Credential 使用 Credential 相关插件 最佳实践 许多三 ...
- D. Equalize the Remainders 解析(思維)
Codeforce 999 D. Equalize the Remainders 解析(思維) 今天我們來看看CF999D 題目連結 題目 略,請直接看原題 前言 感覺要搞個類似\(stack\)的東 ...
- 震惊!你还不知道SpringBoot真正的启动引导类
引言 SpringBoot项目中的启动类,一般都是XXApplication,例如「StatsApplication」,「UnionApplication」. 每个项目的启动类名称都不一样.但是它的启 ...
- Python爬虫之线程池
详情点我跳转 关注公众号"轻松学编程"了解更多. 一.为什么要使用线程池? 对于任务数量不断增加的程序,每有一个任务就生成一个线程,最终会导致线程数量的失控,例如,整站爬虫,假设初 ...
- 《Clojure编程》笔记 第16章 Clojure与web
目录 背景简述 第16章 Clojure与web 16.1 术语 16.2 Clojure栈 16.3 基石:Ring 16.3.1 请求与应答 16.3.2 适配函数 16.3.3 处理函数 16. ...
- 前端未来趋势之原生API:Web Components
声明:未经允许,不得转载. Web Components 现世很久了,所以你可能听说过,甚至学习过,非常了解了.但是没关系,可以再重温一下,温故知新. 浏览器原生能力越来越强. js 曾经的 JQue ...
- SpringCloud之Gateway
一.为什么选择SpringCloud Gateway而不是Zuul? Gateway和Zuul的职责一样,都承担着请求分发,类似Nginx分发到后端服务器. 1.SpingCloud Gateway ...
- SAM学习笔记&AC自动机复习
形势所迫,一个对字符串深恶痛绝的鸽子又来更新了. SAM 后缀自动机就是一个对于字符串所有后缀所建立起的自动机.一些优良的性质可以使其完成很多字符串的问题. 其核心主要在于每个节点的状态和$endpo ...