生物分子gene

 

 输入:

3
A+00A+A+ 00B+D+A- B-C+00C+

输出:

bounded

说明一下100%的题解

假设一个单位为0000A+B-

那么显然这个方块可以连接B+和A-

那么建图就是A+~B+,B-~A-

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 char str[10001];
 8 int map[54][54],d[54],cnt;
 9 queue<int>Q;
10 int n;
11 int num(char x,char y)
12 {
13   if (x=='0') return 52;
14   if (y=='+')
15     return ((int)x-'A');
16   else return ((int)x-'A'+26);
17 }
18 int main()
19 {int i,j,k;
20   cin>>n;
21   for (i=1;i<=n;i++)
22     {
23       scanf("%s",str+1);
24       for (j=1;j<=4;j++)
25     {
26       for (k=1;k<=4;k++)
27         {
28           if (j==k) continue;
29           int x=num(str[2*j-1],str[2*j]);
30           int y=num(str[2*k-1],str[2*k]);
31           if (x==52||y==52) continue;
32           if (y>=26) y-=26;
33           else y+=26;
34           map[x][y]=1;
35         }
36     }
37     }
38   for (i=0;i<52;i++)
39     for (j=0;j<52;j++)
40       if (map[i][j]) d[j]++;
41   for (i=0;i<52;i++)
42     if (d[i]==0) cnt++,Q.push(i);
43   while (Q.empty()==0)
44     {
45       int u=Q.front();
46       Q.pop();
47       for (i=0;i<52;i++)
48     if (map[u][i])
49       {
50         d[i]--;
51         if (d[i]==0)
52           {
53         cnt++;
54         Q.push(i);
55           }
56       }
57     }
58   if (cnt==52)
59     {
60       cout<<"bounded\n";
61     }
62   else
63     {
64       cout<<"unbounded\n";
65     }
66 }

 

posted @ 2017-09-13 19:29  Z-Y-Y-S  阅读(285)  评论(0编辑  收藏  举报