There are n consecutive seat places in a railway carriage. Each place is either empty or occupied by a passenger.
The university team for the Olympiad consists of a+b students, which you can put in the railway carriage so that:
- no student-programmer is sitting next to the student-programmer;
- and no student-athlete is sitting next to the student-athlete.
In the other words, there should not be two consecutive (adjacent) places where two student-athletes or two student-programmers are sitting.
Consider that initially occupied seat places are occupied by jury members (who obviously are not students at all).
The first line contain three integers a+b>0) — total number of seat places in the railway carriage, the number of student-programmers and the number of student-athletes.
The second line contains a string with length
Print the largest number of students, which you can put in the railway carriage so that no student-programmer is sitting next to a student-programmer and no student-athlete is sitting next to a student-athlete.
5 1 1
*...*
2
6 2 3
*...*.
4
11 3 10
.*....**.*.
7
3 2 3
***
0
In the first example you can put all student, for example, in the following way: *.AB*
In the second example you can put four students, for example, in the following way: *BAB*B
In the third example you can put seven students, for example, in the following way: B*ABAB**A*B
The letter A means a student-programmer, and the letter B — student-athlete.
题意:在一排座位上,有空位,有两种类型的人需要我们去给他们排座位,相同类型的人不能坐在一起,问最多可以坐多少个人
我觉得这是一个贪心模拟题,min(可用长度,a的人数) + min(b,长度) +min((剩余a+b) ,额外座位数),一开始wa了好多发是因为没有判断剩余的a和b哪个更加大、
所以这题的几个坑点是:1.从左到右每次排座位时要注意当前位置的左边
2.要想坐最多的人就应该先排人数多的那一种类型
3.要判断当前的a类型或b类型是否为0,提前判断
附上代码
#include <bits/stdc++.h> using namespace std; char s[200005]; int main(){ int n, a, b; scanf("%d%d%d", &n, &a, &b); scanf("%s", s+1); int l = strlen(s+1); s[0] = '.'; int ans = 0; for(int i=1;i<=l;i++){ int mx = max(a, b); if(s[i] == '*') continue; if(a == 0 && b == 0) break; if(a == 0){ if(s[i-1] == 'b') continue; s[i] = 'b'; b--; ans++; } else if(b == 0){ if(s[i-1] == 'a') continue; s[i] = 'a'; a--; ans++; } else{ if(mx == a){ if(s[i-1] == 'a'){ s[i] = 'b'; b--; } else{ s[i] = 'a'; a--; } ans++; } else if(mx == b){ if(s[i-1] == 'b'){ s[i] = 'a'; a--; } else{ s[i] = 'b'; b--; } ans++; } } } printf("%d\n", ans); }