题目传送门

本题知识点:模拟

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

我们针对样例来理解一下 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. Python进阶----粘包,解决粘包(旗舰版)

    Python进阶----粘包,解决粘包(旗舰版) 一丶粘包 只有TCP有粘包现象,UDP永远不会粘包 什么是粘包     存在于客户端接收数据时,不能一次性收取全部缓冲区中的数据.当下一次再有数据来时 ...

  2. Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

    Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装:            将一些东西封装到一个地方,你还可以取出来( ...

  3. win10设置锁屏密码

    1.点击右下角窗口键 2.选择点击设置 3.点击账户 4.点击登录选项 5.点击密码,添加密码 6.设置密码 7.使用快捷键“窗口键+l”锁屏,就会提示你输入密码

  4. 【重大更新】Qlik Sense September 2018重磅发布(附下载)

    作为数据分析领域领导者,Qlik,始终致力于通过产品创新来帮助企业客户撬动数据力量.近日,Qlik Sense September 2018如期而至,不仅对原有版本进行了众多优化,还发布了一系列能够提 ...

  5. Resource interpreted as Document but transferred with MIME type application/json

    转自:https://blog.csdn.net/just_lover/article/details/81207472 我在修改并保存后,界面返回提示“undifine”,实际我是看到有返回提示的. ...

  6. window.requestAnimationFrame()的使用,处理更流畅的动画效果

    https://blog.csdn.net/w2765006513/article/details/53843169 window.requestAnimationFrame()的使用 2016年12 ...

  7. C#中多集合组合实现

    C#中多集合组合使用方法,主要用到 Enumerable.Join方法 var skuInfoList = new Dictionary<int, List<long>>(); ...

  8. django admin-过滤器

    django框架的admin模块,通过list_filter提供给用户自定义分类查询的接口,并且我们可以在原有类的基础上扩展出符合自身应用场景的过滤器. 定义模型 以 Student 模型为准,管理类 ...

  9. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

  10. Kotlin属性引用进阶与构造方法引用

    继续还是探讨Kotlin反射相关的知识点,说实话这块不是太好理解,待在实际工作中去对它进行实践慢慢来加深印象. 属性引用进阶: 在Kotlin中的反射其实是跟Java的反射有对应关系的,具体相关的定义 ...