hdu 5357 2015-08-10 22:52 7人阅读 评论(0) 收藏...


括号匹配,栈


开始感觉题意很奇怪,表示这道题不会做。。。然而看了题解,原来并不是太难啊~!


我太弱了,还是直接贴代码吧。。。


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <string>
#include <map>
#include <vector>
#include <stack>
#include <queue>
#include <utility>
#include <iostream>
#include <algorithm>

template<class Num>void read(Num &x)
{
    char c; int flag = 1;
    while((c = getchar()) < '0' || c > '9')
        if(c == '-') flag *= -1;
    x = c - '0';
    while((c = getchar()) >= '0' && c <= '9')
        x = (x<<3) + (x<<1) + (c-'0');
    x *= flag;
    return;
}
template<class Num>void write(Num x)
{
    if(x < 0) putchar('-'), x = -x;
    static char s[20];int sl = 0;
    while(x) s[sl++] = x%10 + '0',x /= 10;
    if(!sl) {putchar('0');return;}
    while(sl) putchar(s[--sl]);
}

const int maxn = 1e6 + 50, Mod = 1e9+7;

char str[maxn];
int T, n, a[maxn], b[maxn];
int pre[maxn], match[maxn];
long long ans[maxn];

int stack[maxn], top;

void prework()
{
    top = 0;

    for(int i = 1; i <= n; i++)
    {
        match[i] = pre[i] = 0;

        if(str[i] == '(')
            stack[++top] = i;
        else
        {
            if(top)
            {
                match[stack[top]] = i;
                match[i] = stack[top];

                if(top > 1) pre[match[i]] = stack[top - 1];

                stack[top--] = 0;
            }
        }
    }

}

void solve()
{
    a[0] = b[n + 1] = ans[0] = 0;

    for(int i = 1; i <= n; i++)
        a[i] = (str[i] == ')' && match[i])?(a[match[i] - 1] + 1):0;

    for(int i = n; i >= 1; i--)
        b[i] = (str[i] == '(' && match[i])?(b[i] = b[match[i] + 1] + 1):0;

    for(int i = 1; i <= n; i++)
         ans[i] = (str[i] == '(')?(ans[pre[i]] + ((long long)b[i]*a[match[i]] % Mod) % Mod):ans[match[i]];  

}

long long calcu()
{
    long long tot = 0;

    for(int i = 1; i <= n; i++)
        tot = tot + ans[i]*i % Mod;

    return tot; 
}


int main()
{
#ifndef ONLINE_JUDGE
    freopen("5357.in","r",stdin);
    freopen("5357.out","w",stdout);
#endif

    read(T);

    while(T--)
    {
        scanf("%s", str + 1);

        n = strlen(str + 1);

        prework(), solve();

        write(calcu()), puts("");
    }

#ifndef ONLINE_JUDGE
    fclose(stdin);
    fclose(stdout);
#endif
    return 0;            
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/dashgua/p/4722944.html

国科大学习资料--遥感原理集图像处理(尤红建)--2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 ================================================================== ================================================================== ============== 阅读详情

相关推荐

pandas,构造MultiIndex的四种方法:from_tuples、from_arrays、from_product、from_frame

1、from_tuples:通过 “元组对” 构造MultiIndex """ 一对元组,为一个索引 """ tuples = [(1, 'red'), (1, 'blue'), (2, 'red'), (2, 'blue')] pd.MultiIndex.from_tuples(tuples, names=('number', 'color')) 2、from_arrays:通过 “列表元素的组合” 构造MultiIndex """ 列中表的元素,按位置 对应组合,形成索引 """ arrays

jieru_liu的博客 5384

官方题解参考与分层复现方法论:把「参考答案」变成可复现资产

本文完整复盘安全实战「官方参考与分层复现方法论」:从授权测试环境切入,围绕信息收集与漏洞验证逐层展开,最终完成漏洞验证与影响面确认。文中给出完整复现步骤与验证方法,可作为安全工程师的实战参考。

kingx3的博客 21

关于旋转矩阵的左乘与右乘问题

最近在阅读框架源码时被旋转矩阵左乘右乘绕的云里雾里,故写下一篇记录一下,以防自己不长记性。

菜鸡正在学习 1万+

【FreeRTOS源码学习笔记】任务创建

【FreeRTOS源码学习笔记】任务创建

2502_90565057的博客 456

判断两个多边形是否相交(java实现)

判断两个多边形是否相交 ,当前认为一个点相交也是相交,可针对凹多边形和凸边型等多复杂的多边形进行相交判断,采用java实现,因为网上java实现的比较少,所以这里写下如何实现,适用于碰撞检测,地图等等应用场景

IT_CREATE的博客 5843

VMware Ubuntu虚拟机突然断网?我用5步彻底解决了(附避坑指南)

Ubuntu虚拟机断网问题通常由网络配置冲突和VMware服务未正确绑定导致。本文提供5步解决方案:1)清理Ubuntu重复有线连接;2)重启Windows主机的VMware服务;3)检查VMware虚拟网络配置;4)重新配置Ubuntu网络参数;5)测试网络连通性。关键避坑点包括:避免多连接共存、修改配置后必重启服务、确保虚拟网卡绑定主机。通过"网卡状态→IP/路由→网关→服务"的排查思路,可快速解决虚拟机网络故障。文末附有详细的故障症状对照表,便于快速定位问题。

m0_58530495的博客 626

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 352

OceanBase数据库:从入门到精通全栈教程目录(含架构解析、性能调优与实战案例)

《OceanBase数据库专栏》全面解析蚂蚁集团自主研发的分布式关系型数据库,涵盖从基础到高级的完整知识体系。专栏分为入门篇、原理篇、使用篇等七大模块,包含35+篇深度文章,详细讲解OceanBase的高可用架构、Paxos协议、LSM树存储引擎等核心技术。特别提供MySQL/Oracle迁移指南、金融/电商场景实践案例,以及性能调优、运维监控等实战内容。适合开发者、DBA及架构师快速掌握OceanBase的核心特性和行业应用,助力企业实现数据库分布式转型。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 981

LeetCode 1861. 旋转盒子|Go 双指针解法

j >= 0,如果写成j>0,会漏掉第 0 列,最左侧石头处理失败旋转矩阵行列互换:原 m 行 n 列 → 结果 n 行 m 列,make 数组长度不要写反旋转公式m-1-i:是原总行数 m,不是 n!很容易写成n-1-i区分:本题和轮转数组(189)分组循环不一样!189:所有元素固定移动 k 步,需要 gcd 分组1861:障碍物分割成多个独立段,石头向段末尾挤,用双指针更合适。

2503_92676540的博客 175

用 ABAP 驾驭 OAuth 2.0:从 Authorization Code 到 SAML Bearer 的全栈落地指南

ABAP平台OAuth 2.0客户端开发实践 本文为SAP开发者详细解析ABAP平台内置OAuth 2.0客户端的使用方法,涵盖四种授权流的最佳实践: 授权流选择: Authorization Code:适用于用户交互场景 SAML 2.0 Bearer:适合已有SAML体系的企业 Client Credentials:系统间通信 Password Credentials:过渡方案(不推荐) 配置流程: 通过SE80定义Client Profile 使用SOAUTH2_CLIENT/OA2C_CONFIG配

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 309

Allegro基本规则设置指导书之Spacing Region

当网络需要在Region中需要按照自身的规则匹配时,可以创建Region Class来匹配。Region也支持Class to Class规则,点击ok即可。Allegro基本规则设置指导书之Spacing Region。下面介绍基本规则设置指导书之Spacing Region。给创建好的Region 匹配一个规则。空白的地方创建一个Region。

weixin_54787054的博客 563

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 15

数据库小技能:数据导入脚本

背景:版本大升级,从2.0升级到3.0 ,服务端开发语言从c#换到java语言。数据库类型从microsalft sql server 换到mysql。数据来源于微信,用于查询卡bin。

专注于计算机研发知识和资讯分享 772

26-下载中心按哈希分目录存文件

为解决大导出文件存储的扩展性与一致性问题,采用哈希分目录策略:以任务 key 前四位划分为两级子目录,结合安全文件名构建路径(如 a3/f9/a3f9c2e1..._orders.xlsx),实现文件分散存储。业务库仅保存任务状态与 key,下载中心通过内网接口接收文件流并管理持久化,支持无状态扩容。配合内存索引与定期清理作业,确保元数据与文件一致。该方案有效避免单目录膨胀、提升性能,并通过共享令牌控制访问,保障安全性。

CAthlete的博客 179

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Vue3 低代码移动表单设计器实战(二):缩放画布下的拖拽系统与树状级联数据结构

本文深入剖析Vue3低代码表单设计器在缩放画布下的拖拽失效问题,揭示SortableJS在CSS Transform下坐标崩溃的数学根源。通过自研独立视觉克隆壳层与逆向几何补偿算法,实现精准拖拽;采用扁平数据存储+运行时树状计算结构,解决级联依赖与深克隆难题,确保逻辑一致性与性能优化,为复杂低代码系统提供可复用的工程范式。

NanChen的博客 331

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

模拟实现 map 和 set —— 基于红黑树的复用设计

/ 三叉链,便于迭代器 -- / ++ 向上回溯T _data;Color _col;, _data(data), _col(RED) // 新结点默认红色{}设计决策目的收益模板参数T而非K, V让同一棵树同时容纳K和pair<K,V>一次实现,两处复用KeyOfT仿函数从T中抽出真正的 key 进行比较map 只以 key 排序,符合语义迭代器用nullptr表示 end结合"向祖先回溯"的++逻辑无需额外标记位,天然对齐Insert返回同时告知位置与是否新插。

2603_95728536的博客 499

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【数据结构-2】顺序表的实现

线性表是一种数据结构,它分为逻辑结构和物理结构,在逻辑结构上线性表是呈线性的,数据是是连续存储的;在物理结构(物理空间)上,线性表不一定是连续存储的。线性表的实现,主要分为数组和链式结构。顺序表是线性表的一种实现方式,顺序表在逻辑结构和物理结构上都是连续的。顺序表的底层实现是数组。

weixin_44218929的博客 204

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 176

C 语言 malloc() 详解与实战 Demo

本文详解C语言malloc()函数,涵盖其语法、内存原理及实战应用。通过动态整数、数组、结构体与链表的Demo,演示如何安全申请、使用与释放内存,强调避免内存泄漏与空指针检查的重要性,帮助开发者掌握动态内存管理核心技能。

tangPHP的博客 364

Lehmer Code(莱默码):离散化 + 树状数组求右侧严格小于元素个数

本文介绍莱默码(Lehmer Code)的高效求解方法。针对排列中每个元素右侧严格小于它的个数,采用“离散化+树状数组”策略:先将数值映射到1~N的排名,再从右向左扫描,利用树状数组动态维护已处理元素,每次查询小于当前值的个数并插入当前元素。时间复杂度O(N log N),空间复杂度O(N),适用于N ≤ 10⁵的大规模数据,避免了暴力O(N²)的超时问题。

冻柠茶飞冰走茶 306

Java 项目实战: 交友项目 - 小视频模块实战:访客记录、FastDFS 存储与 SpringCache 缓存

本文实现小视频模块核心功能:基于MongoDB记录“谁看过我”访客数据,使用FastDFS分布式文件系统存储视频与缩略图,通过Dubbo服务完成发布与列表接口。结合Spring Cache注解(@Cacheable/@CacheEvict)对视频列表缓存30秒,发布后自动清空缓存,提升性能并保证数据实时性。工程新增视频、访客实体及缓存配置,三条技术线(MongoDB、FastDFS、Redis)协同支撑完整链路。

Wang的专栏 308

C++相交链表和反转链表详解

相交链表和反转链表是两道方向不同、但都依赖「指针重新接线」的基础题。前者问两个单链表是否共用某段后继,后者要求把整条链表的指向完全颠倒。放在一起讲,是因为它们共享同一套底层技能:知道什么时候要暂存next、知道循环结束时哪个指针是新的头、知道空链表和单结点这些边界怎么处理。常见的误解有三个。第一,判断相交时比较结点的值,而不是结点地址——值相同的两个独立结点会被误判成公共结点。第二,反转链表时先把cur->next改成prev,再去读cur->next找下一个结点,结果读到的是已经改掉的值,链表断裂。

eggwyw的博客 151

头歌 数据结构——C&C++线性表实训

本系列任务围绕线性表的链式实现,依次完成顺序构建、逆序构建、排序插入、查找、删除、求长度及栈、队列、集合等应用。通过动态内存分配与指针操作,掌握单链表的基本操作与实际应用,涵盖插入、删除、遍历、搜索等核心功能,最终实现数据结构在典型场景中的灵活运用。

一名敲代码的苦13程序员 231

MoE 剪掉 25% 专家:Qwen3 数学只掉 1.3 点

MoE模型部署成本主要来自显存,而非算力——尽管仅激活部分专家,但所有专家需常驻显存。传统按激活频率剪枝忽视了专家间的结构性冗余。本文通过熵有效秩、稳定秩与有效模态数三指标揭示:专家输出实际分布在低维子空间,分布模态远少于名义数量(如128专家仅27.2个有效模态)。据此提出结构保持剪枝方法PEEP与DCEP,基于函数子空间与分布几何贪心选集,显著提升剪枝效率:Qwen3-30B-A3B保留75%专家时数学得分仅降1.3点,优于SOTA;DeepSeek-V2-Lite砍至50%仍保关键性能。

Arborseek的博客 356

Map 接口 & HashMap & LinkedHashMap & TreeMap

称之为键值对(Entry)key 唯一,不能重复;value 可以重复一个 key 只能对应一个 value;如果 put 相同 key,后面的值会覆盖前面的值key 和 value 都可以是 null,但是HashMap 最多只能有一个 key 为 null,value 可以多个 nullMap 集合没有继承 Collection 接口,是独立的双列集合,遍历方式和 Collection 单列集合不一样//学生类,作为key,必须重写hashCode、equals。

Sarvartha的博客 203

LeetCode100+java面经+DDD领域驱动设计理解

结合测开、全栈与Agent方向,建议以“盛最多水的容器”和“两数之和”为切入点,掌握双指针与哈希思想,夯实算法基础。通过策略模式实现支付模块解耦,提升代码可维护性;运用DDD领域驱动设计重构业务逻辑,实现充血模型与事件驱动,降低系统耦合。最终构建一个融合算法、架构与设计模式的全栈项目,为测开、全栈及Agent开发岗位提供有力支撑。

记录大学学习学习成长过程,欢迎各位一起交流 873
上一篇: poj 2796 分类: poj 2015-0...
下一篇: zoj 2334 分类: zoj templa...
aa288288
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值