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 |
Re:一次AC~~~谈谈思路~~给同我一样 一开始为算法犯愁的 人(付代码(不存括号 ))(本人很菜 算法可能不是很好 请广大朋友多多指教)In Reply To:一次AC~~~谈谈思路~~给同我一样 一开始为算法犯愁的 人(付代码(不存括号 ))(本人很菜 算法可能不是很好 请广大朋友多多指教) Posted by:ylllxw08 at 2009-08-10 15:41:41 > 本题 刚刚拿出来 容易让人想到 用堆栈去做 ~~~但是此题其实不用堆栈!!!而且也不需要将括号的存放模拟出来;仅仅只是用输入的数字转换一下,做个循环直接得到结果~~~ 用两个数组 一个存放输入的数中每两个之间的差 当然第一个就是它本身 ~~~~我们可以这样想 :::如果此数组中这个值不为零的话 就是说这两个右括号中间有左括号 那么这个匹配就一定为一 而需要考虑的是 差为零的情况 !!!那么就往前找吧 弄个循环~~~直到差不为零为止 当然每次要将其 减一 这样看来 ~~~~此题也就是 输入的数转化成差 计算时候二层 循环就得到结果~~~~ > 本人以为此法还算不错 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