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