Codeforces 392 B Blown Garland

Posted SomnusMistletoe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 392 B Blown Garland相关的知识,希望对你有一定的参考价值。

题意:输入是由连续的RYGB和字符!组成的字符串,R代表红灯,Y代表黄灯,G代表绿灯,B代表蓝灯。简而言之,就是给定的字符串保证了下标对4取余相同的灯颜色都相同,但是有的地方为‘!’代表这个灯坏了,然后分别输出坏了的红、蓝、黄、绿灯的数量。

分析:因为下标对4取余相同的灯颜色都相同,所以确定了前四个灯的颜色,后面的灯都是前四个灯颜色的不断循环,两个map映射一下就可以了。

#include<bits/stdc++.h>
#define Min(a, b) ((a < b) ? a : b)
#define Max(a, b) ((a < b) ? b : a)
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
const int MOD = 1e9 + 7;
const double pi = acos(-1.0);
const double eps = 1e-8;
const int MAXN = 100 + 10;
const int MAXT = 500 + 10;
using namespace std;
char s[MAXN];
map<int, char> mp;
map<char, int> ma;
int a[5];
int main(){
    ma[R] = 0;
    ma[B] = 1;
    ma[Y] = 2;
    ma[G] = 3;
    while(scanf("%s", s) == 1){
        mp.clear();
        memset(a, 0, sizeof a);
        int len = strlen(s);
        for(int i = 0; i < len; ++i){//确定前四个灯的颜色
            if(i % 4 == 0 && s[i] != !){
                mp[0] = s[i];
            }
            if(i % 4 == 1 && s[i] != !){
                mp[1] = s[i];
            }
            if(i % 4 == 2 && s[i] != !){
                mp[2] = s[i];
            }
            if(i % 4 == 3 && s[i] != !){
                mp[3] = s[i];
            }
        }
        for(int i = 0; i < len; ++i){
            if(s[i] == !){
                int t = i % 4;
                char c = mp[t];//每个坏了的灯分别是什么颜色,并统计个数
                ++a[ma[c]];
            }
        }
        printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
    }
    return 0;
}

 

以上是关于Codeforces 392 B Blown Garland的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #392 (Div. 2)

Codeforces Round #392 (Div. 2)

Codeforces Round #392 (Div. 2) F. Geometrical Progression

Codeforces Round #392 (Div. 2)

CodeForces - 392C Yet Another Number Sequence (二项式展开+矩阵加速)

Codeforces Round #392 (Div. 2)