题目传送门

本题知识点:模拟

这是一道恐怖的括号题。题意稍微理解以下还是可以的。

我们针对样例来理解一下 S、P、W 到底是什么意思:

S:( ( ( ( ) ( ) ( ) ) ) )

P:

\(P_1\) 为 4 :是因为在第一个 ) (数组第4位)前面有4个 (

\(P_2\) 为 5 :是因为在第二个 ) (数组第6位)前面有5个 (

\(P_3\) 为 6 :是因为在第三个 ) (数组第8位)前面有6个 (

(后面 \(P_4\) \(P_5\) \(P_6\) 情况跟 \(P_3\) 是一样的,所以不重复啰嗦了)

W:

\(W_i\) 表示的是括号数,为了表示清楚一点下面用粗体标清楚

\(W_1\) 为 1:是因为 ( ( ( ( ) ( ) ( ) ) ) ) 在与第一个 ) 前面的 ( 只形成了 1 个 ( )

(\(W_2\) \(W_3\) 情况跟 \(W_1\) 一样)

\(W_4\) 为 4:是因为 ( ( ( ( ) ( ) ( ) ) ) ) 第 4 个 ) 与数组第 2 位的 ( 配对了,除了它们俩一对外,它们还包含了里面 3 对,所以是 4 对

为什么第 4 个不能与数组第 7 位的 ( 配对?因为第 7 位的已经跟前面的 ) 配对了。

相信看到这里就算没读懂题意的你也有一点开窍了。从第一个 ) 开始,与它最相近的 ( 进行配对,配对之后就不能让后者配对了。所以我们这里可以弄一个bool数组来记录 ( 是否已经配对。

在此之前,我们还要先构造出 S 的字符串,这个构造比较简单,请结合代码思考一下。

随后就遍历一下 S 字符串,再记录一下每个 ) 所对应的答案即可。

数据很小,这种暴力解题没有问题!

// POJ 1068
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int T, n;
int P[25], W[25], pla[25];
char pra[50];
bool take[50]; int main()
{
scanf("%d", &T);
while(T--){
memset(take, false, sizeof(take));
scanf("%d", &n);
for(int i = 0; i < n; i++) scanf("%d", &P[i]); // 构造 S 字符串
int left = 0, i = 0, k = 0;
while(i < n){
if(left == P[i]){
pra[k++] = ')';
i++;
}
else {
pra[k++] = '(';
left++;
}
} // 记录每个 ) 的位置
int cnt = 0, c = 0;
for(int i = 0; i < n * 2; i++){
if(pra[i] == ')') {
pla[cnt++] = i;
}
} // 最终遍历找答案
for(int i = 0; i < cnt; i++){
int j = pla[i], ans = 0;
while(j >= 0){
if(pra[j] == '('){
ans++;
if(!take[j]){
W[c++] = ans;
take[j] = true;
break;
}
}
j--;
}
} for(int i = 0; i < c; i++){
printf("%d%c", W[i], i != c - 1 ? ' ' : '\n');
} }
return 0;
}

【POJ1068】Parencodings的更多相关文章

  1. 【转】ACM训练计划

    [转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  4. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  6. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  7. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  8. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

  9. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

随机推荐

  1. 在IOS10系统中无法定位问题

    果是非https网页,在http协议下通过html5原生定位接口会返回错误,也就是无法正常定位到用户的具体位置,而已经支持https的网站则不会受影响. 目前提供的解决方案: 1.将网站的http设置 ...

  2. prometheus2.0 联邦的配置

    参考:https://blog.51cto.com/lee90/2062252 官网对于联邦的介绍:https://prometheus.io/docs/prometheus/latest/feder ...

  3. copy file

    import io,,,,,,, from https://pub.dev/packages/large_file_copy Directory directory = await getApplic ...

  4. guava使用

    对于Guava Cache本身就不多做介绍了,一个非常好用的本地cache lib,可以完全取代自己手动维护ConcurrentHashMap. 背景 目前需要开发一个接口I,对性能要求有非常高的要求 ...

  5. GoogleMap增加标记和路线轨迹的方法

    声明:本文基于JavaScript环境编写. 前言 按照目前的项目需求,我们需要在谷歌地图上标记出当前仓库的位置.司机补货的行车路径.司机当前班次需要补货的机器的位置,同时根据补货状态的不同标记成不同 ...

  6. 基于web站点的xss攻击

    XSS(Cross Site Script),全称跨站脚本攻击,为了与 CSS(Cascading Style Sheet) 有所区别,所以在安全领域称为 XSS. XSS 攻击,通常指黑客通过 HT ...

  7. Devops Reference

    摘自 https://www.cnblogs.com/yibutian/p/9561657.html DevOps 企业实践 实施DevOps的核心目标是加速团队.企业的IT精益运行,从根本上提升IT ...

  8. 调用Hybris API时遇到的错误消息Cannot find user with uid如何解决

    今天工作中试图调用Commerce Cloud的user creation API用代码创建Hybris用户时,遇到下面这个错误消息. 我觉得很奇怪,因为backoffice里能查到这个id为jerr ...

  9. .gitignore详解(附上eclipse的java项目的 .gitignore文件)

    今天讲讲Git中非常重要的一个文件――.gitignore. 首先要强调一点,这个文件的完整文件名就是“.gitignore”,注意最前面有个“.”.这样没有扩展名的文件在Windows下不太好创建, ...

  10. Centos 脚本中几个特殊符号的作用笔记

    反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串 单引号(''):转义其中所有的变量为单纯的字符串 双引号(""):保留其中的变量属性,不进行转义处理 反引号(``):把其中的 ...