正文

何时“苏醒”? (湖南省第二届程序设计大赛)2007-08-19 10:00:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/28649.html

分享到:

何时“苏醒”?
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB
Total submit users: 61, Accepted users: 41
Problem 10843 : No special judgement
Problem description
人类的大脑是按功能分区的。正常人的大脑分区都是活跃的,分区之间有着广泛的神经连接;而脑病患者的某些大脑分区则是不活跃的,处于“睡眠”状态。最近的研究发现:如果某个“睡眠”分区X与其它至少3个活跃分区保持连接1年时间,则分区X会“苏醒”过来,恢复成活跃状态。 “苏醒”后的分区不会再转入“睡眠”状态。
有位病人的大脑分区都处于“睡眠状态”。经用一种新方法治疗后,其中3个分区同时“苏醒”过来。根据上文的结论,若不再进行治疗则其它分区经过多少年也能全部“苏醒”过来?

Input
输入文件的第1行仅包含1个整数M,取值范围是[3, 26],它表示病人大脑的分区数。
第2行也只包含1个非负整数N,它表示分区之间的连接数(如果分区A与分区B相连,则分区B也与分区A相连。由于这样的连接是等价的,所以只计数1次)。
第3行包含3个相邻的大写英文字母,分别代表刚刚同时“苏醒”的3个分区。
第4行中包含N个用空格分割的字符串,每个字符串包含2个大写英文字母,分别代表2个相连接的分区。


Output
如果该病人的大脑分区经过若干年后能够全部“苏醒”,请在输出文件中按格式输出一行:
“WAKE UP IN n YEARS” (其中n指分区全部“苏醒”需要的年数)
如果该病人的大脑分区无法全部“苏醒”,请在输出文件中按格式输出一行:
“THIS BRAIN NEVER WAKES UP”


Sample Input
6 
11 
HAB 
AB AC AH BD BC BF CD CF CH DF FH
Sample Output
WAKE UP IN 3 YEARS
Problem Source

湖南省第二届程序设计大赛

/// 这个题比较简单,只要设一个二维数组表示分区的连接情况
/// 用一维数组记录已经苏醒的分区

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int  n;
    while(cin>>n){
        char buf[4];
        int m,y,i,j,w,t;
        bool status[26] = {false},a[26][26] = {false};
        cin>>m;
        cin>>buf;
        status[buf[2]-'A']=status[buf[1]-'A']=status[buf[0]-'A']=true;
        for(i=0; i<m; i++){
            cin>>buf;
            a[buf[0]-'A'][buf[1]-'A']=a[buf[1]-'A'][buf[0]-'A']=true;
        }
        bool flag=true;
        vector<int> wake;
        for(w=3,y=0; flag && w<m; y++){
            wake.clear();
            for(i=0; i<26; i++){
                if(status[i])
                    continue;
                for(t=j=0; j<26; j++){
                    if(a[i][j] && status[j])
                        t++;
                    if(t>=3)
                        break;
                }
                if(j<26)
                    wake.push_back(i);
            }
            if(wake.empty())
                break;
            for(i=0; i<wake.size(); i++){
                w++;
                status[wake[i]]=true;
            }
        }
        if(w==n)
            cout<<"WAKE UP IN "<<y<<" YEARS"<<endl;
        else
            cout<<"THIS BRAIN NEVER WAKES UP"<<endl;
    }
    return 0;
}

 

阅读(2893) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册