QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#401385#5414. Stop, Yesterday Please No MoredukerWA 8ms6192kbC++142.9kb2024-04-28 16:37:282024-04-28 16:37:31

Judging History

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

  • [2024-04-28 16:37:31]
  • 评测
  • 测评结果:WA
  • 用时:8ms
  • 内存:6192kb
  • [2024-04-28 16:37:28]
  • 提交

answer

#define _CRT_SECURE_NO_WARNINGS 0
#include <iostream> 
#include<iomanip>
#include<algorithm>
#include<vector>
#include<map>
#include<string>
#include<set>
#include<queue>
#include <stack>
#include<list>
#include<cstring>
#include<cmath>
#include <cstdlib>
#include<fstream>
#include<climits>
using namespace std;
int divs[1005][1005];
int sum[1005][1005];
void solve() {
    int n, m, up = 0, down = 0, left = 0, right = 0;
    int k;
    scanf("%d %d %d", &n, &m, &k);
    int height = n, width = m;
    string str;
    cin >> str;
    for (int i = 0; i < str.size(); i++)
    {
        if (str[i] == 'U') {
            if (up == 0) {
                height--;
            }
            else {
                up--;
            }
            down++;
        }
        else if(str[i] == 'D'){
            if (down == 0) {
                height--;
            }
            else {
                down--;
            }
            up++;
        }
        else if (str[i] == 'L') {
            if (left == 0) {
                width--;
            }
            else {
                left--;
            }
            right++;
        }
        else {
            if (right == 0) {
                width--;
            }
            else {
                right--;
            }
            left++;
        }
    }
    //开始差分
    int x = up + 1, y = left + 1;
    height = max(height, 0);
    width = max(width, 0);
    set<pair<int, int>> st;
    for (int i = str.size() - 1; i >=0 ; i--)
    {
        if (st.find({ x , y }) == st.end()) {
            st.insert({ x,y });
            divs[x][y]++; 
            divs[x + height][y]--;
            divs[x][y + width]--;
            divs[x + height][y + width]++;
        }
        if (str[i] == 'U') {
            x++;
        }
        else if (str[i] == 'D') {
            x--;
        }
        else if (str[i] == 'L') {
            y++;
        }
        else {
            y--;
        }
    }
    if (st.find({ x , y }) == st.end()) {
        st.insert({ x,y });
        divs[x][y]++;
        divs[x + height][y]--;
        divs[x][y + width]--;
        divs[x + height][y + width]++;
    }
    int ans = 0;
    for (int i =  1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            divs[i][j] += divs[i - 1][j] + divs[i][j - 1] - divs[i - 1][j - 1];
            //cout << divs[i][j] << " ";
            if (height * width - k == divs[i][j]) {
                ans++;
            }
        }
        //cout << endl;
    }
    cout << ans << endl;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            divs[i][j] = 0;
            sum[i][j] = 0;
        }
    }
}
int main() {
   
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 5792kb

input:

3
4 5 3
ULDDRR
4 5 0
UUUUUUU
4 5 10
UUUUUUU

output:

2
20
0

result:

ok 3 number(s): "2 20 0"

Test #2:

score: -100
Wrong Answer
time: 8ms
memory: 6192kb

input:

1060
19 12 0
UDLDDUUUUDDDLLRDUDUURULUUUDRDUDRDRLRLRLULULLLDLDDRLUUUURUUUDDRLLRUUUDULURUULLRDRLRDDURDUUURRRLURLRUULRRUDURDLUUURDLURDDLUUURDDRLLURRDLRUDLRDRLLRRDRDDLDRURRRLUDULLLRUUDLRRURRDLLRRRDLLRDDDLRLRURURDDDL
11 1 0
UR
3 18 33
UDRLR
17 11 132
RLDRDLDRUU
6 10 13
UULUDDLRDLUUDLDD
1 15 0
D
6 20 50
D...

output:

228
11
20
0
18
11
18
94
15
0
0
12
9
8
10
13
5
8
54
8
2
2
0
9
0
76
16
13
1
7
9
9
17
5
15
11
6
1
0
0
12
0
7
0
0
9
0
22
30
51
15
2
6
4
13
36
28
8
56
22
0
10
8
4
3
10
18
8
0
15
18
0
4
21
14
18
63
10
14
15
0
24
10
2
18
16
40
16
12
11
48
46
14
0
121
3
19
30
17
11
0
24
9
8
8
11
16
15
9
62
0
25
0
8
0
6
0
20...

result:

wrong answer 4th numbers differ - expected: '99', found: '0'