QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#401390#5414. Stop, Yesterday Please No MoredukerWA 1ms5928kbC++202.9kb2024-04-28 16:40:432024-04-28 16:40:43

Judging History

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

  • [2024-04-28 16:40:43]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5928kb
  • [2024-04-28 16:40:43]
  • 提交

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+ 1; i++)
    {
        for (int j = 1; j <= m+ 1; 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;
    }
    printf("%d\n", ans);
    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;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

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

output:

2
30
0

result:

wrong answer 2nd numbers differ - expected: '20', found: '30'