1370 二级结构

来源:互联网 发布:u盘写入软件 编辑:程序博客网 时间:2024/04/29 07:29
描述

RNA 的二级结构描述的是碱基配对的情况,一种流行的表示方法是的点-括

号表示法(dot-bracket representation)。没有配对的碱基用点表示,而配对的碱基

用一对括号来表示。例如在下面的结构中:

( ( ( . . . . . ) ( . . . ) ) . . . . ( . . . ) . . . )

碱基1, 2, 3分别和碱基28, 15和9配对。

输入

输入数据第一行包含一个整数,表示有T组数据;

以下T行表示T组数据,对于每组测试数据:

输入只包含一行,为一个点-括号表示。每个字符均来自{'(', ')', '.'}。输入不

含空格。输入一定是匹配的。

输出

对于每组测试数据:

输出包含 L 行(其中L 是输入串的长度),第i行包括一个数Pi,表示与第

i 个碱基配对的碱基序号。如果未配对,输出0。

其中L不大于1000

样例输入
1
((..).)

样例输出

7
5
0
0
2
0
1

简单的栈操作

#include <stdio.h>#include <string.h>char a[1001];int b[1001];int c[1001];main(){int number;int i;int length;int up1,up2,up3;scanf("%d",&number);while(number--){up1=up2=up3=0;scanf("%s",&a);length=strlen(a);for(i=0;i<length;i++){if(a[i]=='(')c[up2++]=i+1;if(a[i]==')'){ b[c[up2-1]]=i+1;b[i+1]=c[up2-1];up2--;}if(a[i]=='.'){b[i+1]=0;}}for(i=1;i<=length;i++)printf("%d\n",b[i]);}}


原创粉丝点击