P3015 [USACO11FEB]最好的括号Best Parenthesis

题解

一定要开 long long !!!

通过阅读英文题面我们知道所给出的字符串是已经匹配好的,所以我们只是计算就好了

考虑栈模拟实现,每一个括号都视作一层

设数组 s[ i ] 为栈中第 i 层左括号所积累的得分

(1)当输入0,也就是入栈一个左括号,那么我们s[ ]数组就往下开拓新的一层

(2)当输入1,也就是入栈一个右括号,当前层为右括号,此时有两种情况:

<1>  上一层的左括号本身没有得分,也就是我们当前的右括号与最近的也就是上一层的左括号匹配,凑出一个()这样的括号,所以把上一层的左括号出栈,它的贡献值为1,添加到上上层的左括号里(因为上上层左括号可能本身就有得分),有:

<2> 上一层的左括号本身有得分,实际上我们当前的右括号并不是与最近的也就是上一层的左括号匹配,而是与上上层的括号匹配,即我们得到 (())括号套括号(灰色括号代表已经出栈消掉了),所以内部括号得分*2添加到上上一层左括号里,有:

注意上一层的左括号出栈时候清空其得分

代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue> using namespace std; typedef long long ll; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} const int maxn=1e5+;
const ll mod=;
int x,n;
ll s[maxn],top=; int main()
{
n=read();
for(int i=;i<=n;i++){
x=read();
if(!x) top++;
else{
if(s[top]==) s[top-]=(s[top-]+)%mod,top--;
else{
s[top-]=(s[top-]+s[top]*)%mod,s[top]=,top--;
}
}
}
printf("%lld\n",s[]);
return ;
}

P3015 [USACO11FEB]最好的括号Best Parenthesis的更多相关文章

  1. 洛谷 P3015 [USACO11FEB]最好的括号Best Parenthesis

    传送门 题目大意:给出括号的得分标准. ()得分为1,如果A的得分为S(A),那么 (A)的得分为2*S(A). 题解:搜索 #include<iostream> #include< ...

  2. 利用栈实现括号匹配(python语言)

    原理: 右括号总是与最近的左括号匹配 --- 栈的后进先出 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号 当最终右括 ...

  3. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  4. 学习笔记CB004:提问、检索、回答、NLPIR

    聊天机器人,提问.检索.回答. 提问,查询关键词生成.答案类型确定.句法和语义分析.查询关键词生成,提问提取关键词,中心词关联扩展词.答案类型确定,确定提问类型.句法和语义分析,问题深层含义剖析.检索 ...

  5. 【Common】NO.81.Note.1.Common.1.001-【各种英文符号的表示及念法】

    1.0.0 Summary Tittle:[Common]NO.81.Note.1.Common.1.001-[各种英文符号的表示及念法] Style:Common Series:Common Sin ...

  6. 【转】Python——编码规范

    来自于 啄木鸟社区 Python Coding Rule --- hoxide 初译 dreamingk 校对发布 040724 --- xyb 重新排版 040915 --- ZoomQuiet M ...

  7. [IT学习]Learn Python the Hard Way (Using Python 3)笨办法学Python3版本

    黑客余弦先生在知道创宇的知道创宇研发技能表v3.1中提到了入门Python的一本好书<Learn Python the Hard Way(英文版链接)>.其中的代码全部是2.7版本. 如果 ...

  8. [Linux] Linux C编程一站式学习 Part.1

    C语言入门 程序基本概念 程序和编程语言 C语言--(编译器)--汇编语言--(汇编器)--机器语言(目标代码 / 可执行代码) 可移植 / 平台无关:平台指计算机体系结构或操作系统,或二者的组合.不 ...

  9. HDU 5831 Rikka with Parenthesis II(六花与括号II)

    31 Rikka with Parenthesis II (六花与括号II) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536 ...

随机推荐

  1. CSS属性margin、padding的区别

    原始状态 不设置margin和padding的状态 margin 设置外边距之后的状态 padding 设置内边距之后的状态 ,注意是撑开,外框高宽由300px变成450px. 说明:本文为原创作品, ...

  2. MySQL锁表解决方法

    https://blog.csdn.net/a5582ddff/article/details/79566678 MySQL锁表解决方法 一.我的处理过程 1.查进程,主要是查找被锁表的那个进程的ID ...

  3. 【2018-01-26】SqlServer 检查死锁和阻塞

    利用sys.sysprocesses SQL进程检查是否出现死锁和阻塞 Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁 select ...

  4. kafka学习链接收藏

    1.kafka官方文档 Apache Kafka : broker.producer.consumer等参数配置直接看目录 2.系统学习 kafka中文教程 - OrcHome <Apache ...

  5. SQL JOB实现数据库同步

    数据库同步是一种比较常用的功能.以下结合我自己的体会整理的,如果有理解不完全或者有误的地方望大牛不理赐教.下面介绍的就是数据库同步的两种方式: 1.SQL JOB的方式  sql Job的方式同步数据 ...

  6. JavaScript001,鼠标点击改变文字或图片

    <h3>我的第一个Javascript</h3> <p id="demo1">1.点击按钮,改变内容!</p> <!-- 设置 ...

  7. Mysql 语法豆知识

    https://www.cnblogs.com/chentianwei/p/8093748.html mysql增加了大量语法,以前没有接触过.比如 create function begin..en ...

  8. Java并发包--ThreadPoolExecutor

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509941.html ThreadPoolExecutor简介 ThreadPoolExecutor是线 ...

  9. 通过Chrome控制台详细查看ajax请求

    1.F12打开浏览器开发者工具 2.如图所示

  10. BZOJ 1458 / Luogu P4311 士兵占领 (上下界最小流 / 直接最大流)

    做法1:上下界最小流 先来一发上下界最小流,思路比较暴力,就是把行和列看作n+mn+mn+m个点,(i,j)(i,j)(i,j)如果能占领就从第iii行向第jjj列连一条边,上界为1下界为0;然后从s ...