[poj1068]Parencodings_模拟

Parencodings

    题目大意:给你一个P序列,表示从左到右的右括号左边有多少左括号,求M序列。

    注释:M序列定义为每一个右括号左边最近的没有被之前的右括号匹配的括号之间,有多少已经匹配的括号队对。$1\le number for P\le 20$。

      想法:暴力模拟。我们定义dis[i]表示第i-1个右括号到第i个右括号之间有多少可以直接使用的左括号。

        然后我们从当前节点向之前查找,起一个dis大于0的将这个dis-1,并且输出M[i]=i-j+1.(i是当前右括号,j是dis不为0的编号)。

    最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[25];//P数组
int dis[25];
int val[25];//M数组
int main()
{
	int cases;
	scanf("%d",&cases);
	while(cases--)
	{
		//original();不用初始化,因为我们都是重新覆盖所有的数组
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)//其实这题可以在线处理,但是内存又不卡,离线得了
		{
			scanf("%d",&a[i]);
		}
		for(int i=1;i<=n;i++)
		{
			dis[i]=a[i]-a[i-1];//处理dis数组
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=i;j>=1;j--)//find,找到一个合法的dis,然后更新val数组
			{
				if(dis[j])
				{
					dis[j]--;
					val[i]=i-j+1;
					break;
				}
			}
		}
		for(int i=1;i<=n;i++)
		{
			printf("%d ",val[i]);
		}
		puts("");
	}
	return 0;
}

     小结:其实这是个大垃圾题,主要的目的是.... .... 哈哈,没错,我的分类还没有题,想先敲一道垫个底!

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
怎么起名字:早知道就不读书了,害得我送外卖还得扶眼镜
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务