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)