CodeForce-1196D1-RGB Substring (easy version)

原题链接

题目大意:

给出一串由'R', 'G', 'B'组成的长度为n的字符串,在里面选出一个长度为k的子串,要求在改变最少字符的情况下同时也是"RGBRGBRGB…"的子串。

思路:
简单版本测试数据范围小,可以直接暴力。

有三种匹配情况(分别以'R', 'G', 'B'开始),如果不匹配则改变次数+1,每次匹配完都更新一次最小值。

代码:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int q, n, k, mmin;
 6 char ori[3] = {'R', 'G', 'B'};
 7 char s[2002];
 8 
 9 int My_Min(int a, int b)
10 {
11     return a>b?b:a;
12 }
13 
14 int main()
15 {
16     cin >> q;
17 
18     for (int i = 1; i <= q; i++)
19     {
20         cin >> n >> k;
21         mmin = 20000;
22         for (int j = 1; j <= n; j++)
23         {
24             cin >> s[j];
25         }
26 
27         for (int j = 1; j <= n-k+1; j++)
28         {
29             int num[4] = {0};
30             for (int t = 0; t < k; t++)
31             {
32                 if (s[j+t] != ori[t%3])
33                 {
34                     num[1]++;
35                 }
36                 if (s[j+t] != ori[(t+1)%3])
37                 {
38                     num[2]++;
39                 }
40                 if (s[j+t] != ori[(t+2)%3])
41                 {
42                     num[3]++;
43                 }
44             }
45             mmin = My_Min(My_Min(mmin, num[1]), My_Min(num[2], num[3]));
46         }
47         cout << mmin << endl;
48     }
49     return 0;
50 }

猜你喜欢

转载自www.cnblogs.com/liyishan/p/11257520.html