poj 1068 第7题

一次ac蛮开心的。。

题目大意是说给出s表示法就是第i个数表示第i个右括号左边有几个左括号,然后要写出w表示法,,w表示法就是第i个右括号它所配对的左括号是他左边第几个左括号。

思路:这题主要就是一道模拟题。。关键在于利用s表示法将整个序列表示出来,然后就模拟w表示法。。

附上代码:

#include<stdio.h>
#include<string.h>
int s[50];
int a[10010];
char c[10010];
int main ()
{
	int t;
	scanf("%d",&t);
	while (t--)
	{
		memset(a,0,sizeof(a));
		int n;
		scanf("%d",&n);
		int i,j,start=0;
		scanf("%d",&s[0]);
		for(i = 0;i < s[0];i++)
		c[i] = '(';
		c[i++] = ')';
		start=i;
		for(i = 1;i < n;i++)
		{
			scanf("%d",&s[i]);
			for(j = start;j < start+s[i]-s[i-1];j++)
			c[j] = '(';
			c[j++] = ')';
			start = j;
		}
		//for(i=0;i < j;i++) printf("%c",c[i]);
		//printf("\n");
		int end=j,first=0;
		for(i = 0;i < end;i++)
		{
			if(c[i]==')')
			{
				for(j = i-1;j >= 0;j--)
				{
					if(c[j]=='(' && a[j]==0)
					{
						if(!first)
						{
							printf("%d",(i-j)/2+1);     //i-j表示的该右括号其所配对的左括号是该右括号左边的第i-j个括号 
							first=1;                    //而i-j这会是一个奇数,在这两个配对的括号之间的都是已经配对好的括号所以我们要做 (i-j)/2+1这样的处理 
							a[j]=1;
							break;
						}
						else 
						{
							printf(" %d",(i-j)/2+1);
							a[j]=1;
							break;
						}
						
					}
				}
			}
		}
		printf("\n");
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值