| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
一次AC~~~谈谈思路~~给同我一样 一开始为算法犯愁的 人(付代码(不存括号 ))(本人很菜 算法可能不是很好 请广大朋友多多指教)本题 刚刚拿出来 容易让人想到 用堆栈去做 ~~~但是此题其实不用堆栈!!!而且也不需要将括号的存放模拟出来;仅仅只是用输入的数字转换一下,做个循环直接得到结果~~~ 用两个数组 一个存放输入的数中每两个之间的差 当然第一个就是它本身 ~~~~我们可以这样想 :::如果此数组中这个值不为零的话 就是说这两个右括号中间有左括号 那么这个匹配就一定为一 而需要考虑的是 差为零的情况 !!!那么就往前找吧 弄个循环~~~直到差不为零为止 当然每次要将其 减一 这样看来 ~~~~此题也就是 输入的数转化成差 计算时候二层 循环就得到结果~~~~
本人以为此法还算不错 216K 0ms 就拿了出来~~~如果不好 还望见谅 多多指教
#include<iostream>
using namespace std;
int main()
{
int i,j,k,m,n,a[20],b[20],p;
cin>>n;
while(n--)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>k;
m=0;
for(i=0;i<k;i++)
{
cin>>p;
a[i]=p-m;
m=p;
}
b[0]=1;
for(i=1;i<k;i++)
{
if(a[i])
{
b[i]=1;
a[i]--;
}
else
{
for(j=i;a[j]==0;j--);
a[j]--;
b[i]=i-j+1;
}
}
for(i=0;i<k;i++)
{
cout<<b[i];
if(i!=k-1)
cout<<' ';
}
cout<<endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator