POJ 1068 Parencodings (模拟),暑假第一题~

终于考完高线大,头也不那么疼了,也终于有空来刷题了~,先来一发水题试试水

题目链接:http://poj.org/problem?id=1068

简单的模拟,麻烦在理解题意,,英语好的请无视这句;

【分析】

        S		(((()()())))

	P-sequence	    4 5 6666

	W-sequence	    1 1 1456

如这个 S字符串, 题目给你一串数 4 5 6 6 6 6    对应P1 P2,,,Pn

意思是,第n个右括号‘)’左边有Pn 个左括号 ,,例如 456666 第1个右括号“)”左边有4个左括号 ,第2个“)”左面有5个“(”..

让你得出对应的 W-sequence,1 1 1 4 5 6  对应Q1 Q2 ,,Qn

意思是,第n个右括号‘)’和左边第Qn个‘(’是一对;

第一个‘)’可以和它左边第一个‘(‘结合,第二个‘)’也是可以和它左边第一个‘(’结合,,最后一个右括号可以和它左边第六个‘(’结合,  于是就有了 111456;

我们可以根据给出的 P-sequence 模拟出 S,将S 存到字符串中,再根据W-sequence的规则在S中遍历,即可模拟求出结果;

【要求】

输入 P-sequence 输出对应的 W-sequence;

【代码】

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	while(n--){
		int t;
		cin>>t;
		string str="";int num;
			int pre=0;
		for(int i=0;i<t;i++){

			cin>>num;
			int now=num-pre;
			for(int j=0;j<now;j++)
				str+='(';
			str+=')';
			pre=num;
		}
	//	cout<<str<<endl;//测试时 输出的模拟出来的字符串;
		int count=0;
		int len=str.length();
		for(int i=0;i<len;i++){
			if(str[i]==')'){
				int cnt1=0;
				int cnt2=0;
				for(int j=i;j>=0;j--){
					if(str[j]==')')
						cnt1++;
					if(str[j]=='(')
						cnt2++;
					if(cnt1==cnt2) //如果遍历到的左右括号个数相同,就说明是一对
					{
						if(count>0)
							cout<<' ';
						cout<<cnt1;
						count++;break;
					}
			}
		}
	}	cout<<endl;
	}

	return 0;
}

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

时间: 2024-10-28 15:25:46

POJ 1068 Parencodings (模拟),暑假第一题~的相关文章

[ACM] POJ 1068 Parencodings(模拟)

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19352   Accepted: 11675 Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: q By an integer sequence P = p1 p2...pn

poj 1068 Parencodings 模拟题

Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: q By an integer sequence P = p1 p2...pn where pi is the number of left parentheses before the ith right parenthesis in S (P-sequence). q B

POJ 1364 King --差分约束第一题

题意:求给定的一组不等式是否有解,不等式要么是:SUM(Xi) (a<=i<=b) > k (1) 要么是 SUM(Xi) (a<=i<=b) < k (2) 分析:典型差分约束题,变换,令Ti = SUM(Xj) (0<=j<=i).  则表达式(1)可以看做T(a+b)-T(a-1) > k,也就是T(a-1)-T(a+b) < -k,又因为全是整数,所以T(a-1)-T(a+b) <= -k-1.  同理,(2)看做T(a+b)-T(

poj 1068 Parencodings

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22797   Accepted: 13363 Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: q By an integer sequence P = p1 p2...pn

HDU 1361 &amp; POJ 1068 Parencodings(模拟)

题目链接: HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1361 POJ:http://poj.org/problem?id=1068 Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two different ways: q By an integer sequence P = p1 p2...pn where

poj 1068 Parencodings(模拟)

Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19434   Accepted: 11734 题目大意:  给出一个整数表示有n组测试样例  每个样例包含两组数  一个整数m 和一个有m个元素的p数组 数组中的元素表示的意思为第i个' ) '之前有多少个' ( '   . 要求输出一个w数组其元素表示的意思为在第i个' ) '和它匹配的'('之间有多少组已匹配好的括号  (包括其自身) 例如 S

NOIP2010-普及组复赛模拟试题-第一题-手机

题目背景 Background 现在手机使用越来越广泛了 题目描述 Description 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下.例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x.0 键按一下会出一个空格.你的任务是读取若干句只包含英文小写字母和空格的句子, 求出要在手机上打出这个句子至少需要按多少下键盘. 输入输出格式 Input/output 输入格式: 一行一个句子,只包含英文小写字母和空格,且不超过 200 个字符. 输出格式:一行一

NOIP2011-普及组复赛模拟试题-第一题-NBA总冠军

题目背景 Background 一年两度的期末考要到来了!! 题目描述 Description 又要到考试了,Ljw决定放松一下,就打开电视,看见了篮球赛,他立即想到了每年的NBA总冠军队伍.由于复习紧张,他只记起了一部分,记忆的内容是正确的,可能不是按时间顺序排列的,记忆的内容可能有重复. 现在请求学过编程的你帮助Ljw,按时间顺序输出总冠军的球队(不能重复). (NBA从1947A.D到2009A.D) 输入输出格式 Input/output 输入格式:输入文件nba.in的第一行是一个整数

POJ 1328(模拟&amp;贪心_A题)解题报告

题目链接:http://poj.org/problem?id=1328 -------------------------------------------------------- 题意:在平面直角坐标系上,给出多个点.寻找能覆盖的圆的最小个数. 思路:乍一看容易陷入寻找圆的圆心的思路中,然而确定圆心不是一个很容易的事情,其确定方法与其他各点都有一定关系.所以这种思路不可取.然后先从最简单的情况下考虑,如果纵坐标大于圆的半径,那么无论何种方式都不能满足题意,所以输出"-1".由此获