QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#647994#6422. Evil Coordinateshabi666#WA 1ms3632kbC++205.3kb2024-10-17 16:31:232024-10-17 16:31:29

Judging History

你现在查看的是最新测评结果

  • [2024-10-17 16:31:29]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3632kb
  • [2024-10-17 16:31:23]
  • 提交

answer

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;

const int N = 1e6 + 5;

void solve() {
    int x, y;
    cin >> x >> y;
    string s;
    cin >> s;
    map<char, int> cnt;
    int ex = 0, ey = 0;
    for (char c : s) {
        cnt[c]++;
    }
    ey = cnt['U'] - cnt['D'];
    ex = cnt['R'] - cnt['L'];
    int eex = ex, eey = ey;
    // cerr << ex << ' ' << ey << endl;
    if (x == 0 && y == 0 || x == ex && y == ey) {
        cout << "Impossible" << endl;
        return;
    }

    if ( ex == 0 || ey == 0 ) {
        if ( cnt['L'] == 0 && cnt['R'] == 0 ) {
            if ( abs(y) <= abs(ey) && y * ey >= 0 ) {
                cout << "Impossible" << endl;
                return;
            }
        } else if ( cnt['U'] == 0 && cnt['D'] == 0 ) {
            if ( abs(x) <= abs(ex) && x * ex >= 0 ) {
                cout << "Impossible" << endl;
                return;
            }
        }

        if ( ex == 0 && abs(y) <= abs(ey) && y * ey >= 0 ) {
            cout << "R";
            cnt['R']--;
            cnt['L']--;

            while ( ex > 0 ) { cout << 'R'; ex--; cnt['R']--; }
            while ( ex < 0 ) { cout << 'L'; ex++; cnt['L']--; }
            while ( ey > 0 ) { cout << 'U'; ey--; cnt['U']--; }
            while ( ey < 0 ) { cout << 'D'; ey++; cnt['D']--; }

            if ( eex + 1 == x && eey == y )  while ( cnt['R'] > 0 ) { cout << "LR"; cnt['R']--; cnt['L']--; }
            else while ( cnt['R'] > 0 ) { cout << "RL"; cnt['R']--; cnt['L']--; }
            if ( eey + 1 == y && eex == x )  while ( cnt['U'] > 0 ) { cout << "DU"; cnt['U']--; cnt['D']--; }
            else while ( cnt['U'] > 0 ) { cout << "UD"; cnt['U']--; cnt['D']--; }

            cout << 'L';

            cout << endl;
        }

        else if ( ey == 0 && abs(x) <= abs(ex) && x * ex >= 0 ) {
            cout << "U";
            cnt['U']--;
            cnt['D']--;

            while ( ex > 0 ) { cout << 'R'; ex--; cnt['R']--; }
            while ( ex < 0 ) { cout << 'L'; ex++; cnt['L']--; }
            while ( ey > 0 ) { cout << 'U'; ey--; cnt['U']--; }
            while ( ey < 0 ) { cout << 'D'; ey++; cnt['D']--; }

            if ( eex + 1 == x && eey == y )  while ( cnt['R'] > 0 ) { cout << "LR"; cnt['R']--; cnt['L']--; }
            else while ( cnt['R'] > 0 ) { cout << "RL"; cnt['R']--; cnt['L']--; }
            if ( eey + 1 == y && eex == x )  while ( cnt['U'] > 0 ) { cout << "DU"; cnt['U']--; cnt['D']--; }
            else while ( cnt['U'] > 0 ) { cout << "UD"; cnt['U']--; cnt['D']--; }

            cout << 'D';

            cout << endl;
        }
        else {
            while ( ex > 0 ) { cout << 'R'; ex--; cnt['R']--; }
            while ( ex < 0 ) { cout << 'L'; ex++; cnt['L']--; }
            while ( ey > 0 ) { cout << 'U'; ey--; cnt['U']--; }
            while ( ey < 0 ) { cout << 'D'; ey++; cnt['D']--; }

            if ( eex + 1 == x && eey == y )  while ( cnt['R'] > 0 ) { cout << "LR"; cnt['R']--; cnt['L']--; }
            else while ( cnt['R'] > 0 ) { cout << "RL"; cnt['R']--; cnt['L']--; }
            if ( eey + 1 == y && eex == x )  while ( cnt['U'] > 0 ) { cout << "DU"; cnt['U']--; cnt['D']--; }
            else while ( cnt['U'] > 0 ) { cout << "UD"; cnt['U']--; cnt['D']--; }

            cout << endl;
        }

        return;
    }
    


    if ( y == 0 && abs(x) <= abs(ex) && x * ex >= 0 || x == ex && abs(y) <= abs(ey) && y * ey >= 0 ) {
        while ( ey > 0 ) { cout << 'U'; ey--; cnt['U']--; }
        while ( ey < 0 ) { cout << 'D'; ey++; cnt['D']--; }
        while ( ex > 0 ) { cout << 'R'; ex--; cnt['R']--; }
        while ( ex < 0 ) { cout << 'L'; ex++; cnt['L']--; }

        if ( eex + 1 == x && eey == y )  while ( cnt['R'] > 0 ) { cout << "LR"; cnt['R']--; cnt['L']--; }
        else while ( cnt['R'] > 0 ) { cout << "RL"; cnt['R']--; cnt['L']--; }
        if ( eey + 1 == y && eex == x )  while ( cnt['U'] > 0 ) { cout << "DU"; cnt['U']--; cnt['D']--; }
        else while ( cnt['U'] > 0 ) { cout << "UD"; cnt['U']--; cnt['D']--; }

        cout << endl;
        return;
    }
    while ( ex > 0 ) { cout << 'R'; ex--; cnt['R']--; }
    while ( ex < 0 ) { cout << 'L'; ex++; cnt['L']--; }
    while ( ey > 0 ) { cout << 'U'; ey--; cnt['U']--; }
    while ( ey < 0 ) { cout << 'D'; ey++; cnt['D']--; }

    if ( eex + 1 == x && eey == y )  while ( cnt['R'] > 0 ) { cout << "LR"; cnt['R']--; cnt['L']--; }
    else while ( cnt['R'] > 0 ) { cout << "RL"; cnt['R']--; cnt['L']--; }
    if ( eey + 1 == y && eex == x )  while ( cnt['U'] > 0 ) { cout << "DU"; cnt['U']--; cnt['D']--; }
    else while ( cnt['U'] > 0 ) { cout << "UD"; cnt['U']--; cnt['D']--; }

    cout << endl;
}

void check(string path, int x, int y) {
    int xx = 0, yy = 0;
    for (char c : path) {
        if (c == 'U')
            yy++;
        if (c == 'D')
            yy--;
        if (c == 'L')
            xx--;
        if (c == 'R')
            xx++;
        if (xx == x && yy == y) {
            cout << "ERROR" << endl;
            return;
        }
    }
}

signed main() {
    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);

    int T = 1;
    cin >> T;
    while (T--) solve();
    //check("RRUUUUUUUURLRLRLUDUDUD", 4, 1);

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 3632kb

input:

5
1 1
RURULLD
0 5
UUU
0 3
UUU
0 2
UUU
0 0
UUU

output:

RULRUDL
UUU
Impossible
Impossible
Impossible

result:

wrong answer case 1, participant's output goes through forbidden coordinate