Codeforces Round #417 (Div. 2) A. Sagheer and Crossroads

来源:互联网 发布:淘宝代销流程 编辑:程序博客网 时间:2024/06/05 18:45


题意:如图所示,四条车道加四条人行道,如果人行道和能穿过人行道的车道同时绿灯就会发生意外

CF传送机

解题思路:

1. 以人行道为关注点进行对车道的分析,只有1+2种情况

2. 当人行道为红灯时,随便你车道什么灯都不会发生意外

3. 当人行道绿灯时,首先考虑同一条通道的三条车道,任意一条是绿灯都会发生意外

4. 当人行道绿灯时,考虑和其他三条通道的关系,右方通道的l车道 或 前方通道的s车道 或 左方通道的r车道 ,这其中只要有一条绿灯就会发生意外

注意:进行另外三方车道的处理时,利用求余运算符可以解决数组越界的情况,但要注意最后两个临界点的余数正不正确


以下是我的AC代码:


#include <iostream>using namespace std;int l[5],s[5],r[5],p[5];int main(){    int i,k;    for(i=0;i<4;i++)        cin >> l[i] >> s[i] >> r[i] >> p[i];    for(i=0;i<4;i++)    {        //如果行人灯是红灯就不会出意外        if(p[i]==0)            continue;        //某条通道行人灯绿灯        //1.这条通道任意一条车道灯绿都会发生意外        if(l[i] || s[i] || r[i])            break;        k=i;        //2.这条通道的下一条的左侧车道 或 下下条的中间车道 或 下下下条的右侧车道是绿灯都会发生意外        if(l[(k+1)%4] || s[(k+2)%4] || r[(k+3)%4])            break;    }    //如果车道全部审阅过都没提前跳出来,表示不会发生意外    if(i==4)        cout << "NO" << endl;    else        cout << "YES" << endl;    return 0;}

阅读全文
0 0
原创粉丝点击