题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1361

题目意思: 根据输入的P-sequence , 输出对应的W-sequence.   P-sequence: 表示每个右括号前有多少个左括号;   W-sequence: 表示每个右括号要经过多少个左括号才能找到它能够匹配的左括号.

可以通过栈来做,边输入边处理.假设左括号用-1表示, 已经匹配好的括号(即 () ) 用1表示.那么,如果是左括号的话,就把-1压进去.直到找到匹配的括号.

以样例数据:  4 6 6 6 6 8 9 9 9    为例子

它的输入是这样的:    ( ( ( ( ) ( ( ) ) ) ) ( ( ) ( ) ) )

左边加粗部分表示当前这个右括号的对应左括号,右边加粗部分表示答案

(1)  4:  -1  -1  -1  -1                      --->              -1  -1  -1   1

(2)  6:  -1  -1  -1  1  -1  -1             --->              -1  -1  -1   1  -1  1

(3)  6:  -1  -1  -1   1  -1  1        --->              -1   -1  -1   1  

(4)  6:  -1   -1  -1  1   2        --->              -1   -1  

(5)  6:  -1   -1   4                           --->              -1   5

      (6)  8:  -1  5  -1  -1                        --->              -1   5  -1   1

(7)  9:  -1   5  -1  1  -1                   --->              -1   5  -1  1  1

      (8)  9:   -1   5  -1  1   1        --->              -1   5   3

      (9)  9:   -1   5   3                            --->              9

     

 #include <iostream>
#include <cstdio>
#include <stdio.h>
#include <cstdlib>
#include <stdlib.h>
#include <stack>
using namespace std; stack<int> s; int main()
{
int i, j, n, t, sum, past, cur;
while (scanf("%d", &t) != EOF)
{
while (t--)
{
scanf("%d", &n);
past = cur = ;
for (i = ; i < n; i++)
{
scanf("%d", &cur);
for (j = ; j < cur-past; j++)
s.push(-);
if (s.top() == -) // 找到匹配的那个括号
{
s.pop();
s.push();
}
else
{
sum = s.top();
s.pop();
while ()
{
if (s.top() == -)
break;
sum += s.top();
s.pop();
}
s.pop(); // 弹出匹配的那个括号
s.push(sum+);
}
if (!i)
cout << s.top();
else
cout << " " << s.top();
past = cur;
}
putchar('\n');
while (!s.empty())
s.pop();
}
}
return ;
}

最新文章

  1. 『TCP/IP详解——卷一:协议』读书笔记——15
  2. Android Studio安装与配置
  3. LeetCode One Edit Distance
  4. CCSprite的使用方法大全
  5. Left Join 与Right Join 与 Inner Join 与 Full Join的区别
  6. hdu1033Defragment
  7. 【BZOJ】【2253】【WC 2010 BeijingWC】纸箱堆叠
  8. centos6.5 安装python2.7.5
  9. cf C. Mittens
  10. HashMap,LinkedHashMap,TreeMap的区别(转)
  11. 第19章 网络通信----TCP程序设计基础
  12. ASP.NET Core教程【一】关于Razor Page的知识
  13. hdu 1233 还是畅通project(kruskal求最小生成树)
  14. ●BZOJ 3996 [TJOI2015]线性代数
  15. Nginx 配置HTTPS 与Node.js 配置HTTPS方法
  16. BZOJ_1060_时态同步_树形DP
  17. Python-常用 Linux 命令的基本使用
  18. How to learn PDE (怎么学偏微分方程)
  19. Spring的IOC注解开发入门1
  20. 01 mysql

热门文章

  1. Leetcode总结之Graph
  2. Spring异步任务处理,@Async的配置和使用
  3. iOS -- SpriteKit框架之SKPhysicsBody的移动和连接
  4. dubbo常见问题解答FAQ
  5. 记一次CDH修改IP
  6. Linux以下基于TCP多线程聊天室(server)
  7. SWTBOK測试实践系列(5) -- 项目中使用手动和自己主动化的策略
  8. sparkSQL1.1入门之十:总结
  9. 为Redmine的项目加上起止时间
  10. Legacy BIOS Boot 是如何启动或引导的