#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<map>
#include<algorithm>
#include<queue>
#include<list>
#include<stack>
#include<cstdio>
#include<fstream>
#include<numeric>
#include<functional>
#include<utility>
#include<memory>
using namespace std;
using namespace placeholders;
map<int, map<int, bool>> dp;
int getpoints(char t){
if (t == 'W') return 1;
if (t == 'D') return 0;
return -1;
}
bool solve(int i, int k, int n, int points, string &s){
if (dp[i].find(points) != dp[i].end()) return dp[i][points];
if (points == k || points == -k){
dp[i][points] = (i == n);
return dp[i][points];
}
if (i == n){
dp[i][points] = (points == k || points == -k);
return dp[i][points];
}
if (s[i] != '?'){
dp[i][points] = solve(i + 1, k, n, points + getpoints(s[i]), s);
return dp[i][points];
}
else{
if (solve(i + 1, k, n, points + 1, s)){
s[i] = 'W';
dp[i][points] = true;
return true;
}
if (solve(i + 1, k, n, points - 1, s)){
s[i] = 'L';
dp[i][points] = true;
return true;
}
if (solve(i + 1, k, n, points, s)){
s[i] = 'D';
dp[i][points] = true;
return true;
}
}
dp[i][points] = false;
return dp[i][points];
}
int main(){
int n, k;
string s;
while (cin >> n >> k >> s){
dp.clear();
if (solve(0, k, n, 0, s)) cout << s << endl;
else cout << "NO" << endl;
}
return 0;
}
803E - Roma and Poker
最新推荐文章于 2022-06-01 18:14:22 发布