POJ 1068

http://acm.pku.edu.cn/JudgeOnline/problem?id=1068
这道题目是一道模拟题。P-sequence表示第i个‘)’之前有几个‘(’,W-sequence表示第i个‘()’包含几对‘()’,要求对应P的W。题目中没有要输出S,故‘(’‘)’可以分别用0,1来代替。根据P可以轻易知道‘)’的位置:location = p[i] + i。用value记录w[i]的值,用flag记录括号是否成对。
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 int t,n;
 5 int s[41],p[21],w[21];
 6 int main()
 7 {
 8     scanf("%d",&t);
 9     while(t--){
10         scanf("%d",&n);
11         int temp,flag,value;
12         memset(s,0,sizeof(s));
13         for(int i = 0;i < n;++i){
14             scanf("%d",&p[i]);
15             temp = p[i] + i;
16             s[temp] = 1;
17             for(int k = temp-1,value = 1,flag = 0;k >= 0;--k){
18                 if(s[k] == 0 && flag == 0){
19                     w[i] = value;
20                     break;
21                 }
22                 else if(s[k] == 1){
23                     value++;
24                     flag++;
25                 }
26                 else if(s[k] == 0)flag--;
27             }
28         }
29         for(int i = 0;i < n;++i)printf("%d ",w[i]);
30         printf("\n");
31     }
32     system("pause");
33     return 0;
34 }
35 
code

posted on 2009-07-04 19:53 Johnnx 阅读(914) 评论(1)  编辑 收藏 引用

评论

# re: POJ 1068 2016-07-07 22:02

这个代码写的很好。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(1)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜