题目传送门

本题知识点:模拟

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

我们针对样例来理解一下 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. Spring Security 解析(二) —— 认证过程

    Spring Security 解析(二) -- 认证过程   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .S ...

  2. shell截取字符串操作

    举例变量:url=http://www.baidu.com/123456.html 1. # 号截取,删除左边字符,保留右边字符. echo ${url#*//} # 其中 url 是变量名,# 号是 ...

  3. 图片Image转换为base64编码的方法

    1.FileReader 通过XMLHttpRequest请求图片Blob数据格式,然后利用FileReader转换为dataURL function toDataURL(url, callback) ...

  4. Mysql中类似于oracle中nvl()函数的ifnull()函数

    IFNULL(expr1,expr2)  如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境.  my ...

  5. http请求的几种content-type

    1. 2.二进制文件 3.form-data 数据:a=1 总结: 1.对于我自己的写的服务来说,只要是raw,接收到的都是二进制字符: 2.如果是urlencode,接收到的是拼接的字符串(和使用p ...

  6. springboot+vue2.x 解决session跨域失效问题

    服务端SpringBoot2.x   :localhost:8082 前端Vue2.x                 :localhost:81 前后端的端口号不同,为跨域,导致前端访问后端时,每次 ...

  7. django 的form登录 注册

    #!/usr/bin/env python # -*- coding: utf8 -*- #__Author: "Skiler Hao" #date: 2017/3/30 15:4 ...

  8. Arm Qt编译Qt例程出错 GLES3/gl3.h: No such file or directory 解决方法

    工作环境 PC:Ubuntu18.04QtCreator: 4.8.2交叉编译环境:野火imxull6开发板提供的 5-编译工具链->qt交叉编译工具 在之前博客配置成功的交叉编译环境,编译Qt ...

  9. app开发-2

    一.app登录注册实现 1.首先进行布局,mhead,mbody 在app index.html内创建一个 a链接通过mui.openWindow跳到登录页面 <a class="mu ...

  10. 界面交互~Toast和模态对话框

    界面交互 名称 功能说明 wx.showToast 显示消息提示框 wx.showModal 显示模态对话框 wx.showLoading 显示 loading 提示框 wx.showActionSh ...