题目大意:
辩论有两方,题目给出说话的顺序,每次一方的说话时,可以选择任意一人离开辩论,轮到离开的人时自动往后,问最后哪一方赢了。
题目解法:
贪心,每次有人说的时候一定是选择另一方最先说话的人离开辩论,然后自动往后,满足双端队列的思路。
代码:
#include "iostream"
#include "cstdio"
#include "math.h"
#include "algorithm"
#include "string"
#include "string.h"
#include "vector"
#include "map"
#include "queue"
#include "bitset"
using namespace std;
int main() {
deque<int>Dq, Rq;
int n;
char ch;
scanf("%d", &n);
for (int i = 1;i <= n;i++) {
scanf(" %c", &ch);
if (ch == 'D') {
Dq.push_back(i);
}
else {
Rq.push_back(i);
}
}
while (Dq.size()!=0&&Rq.size()!=0) {
if (Dq.front() < Rq.front()) {
Rq.pop_front();
int temp = Dq.front();
Dq.pop_front();
Dq.push_back(temp+n);
}
else {
Dq.pop_front();
int temp = Rq.front();
Rq.pop_front();
Rq.push_back(temp+n);
}
}
if (Dq.size() != 0)
puts("D");
else
puts("R");
return 0;
}