QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#570998#5414. Stop, Yesterday Please No MoreAbclWA 21ms4940kbC++144.0kb2024-09-17 19:45:012024-09-17 19:45:01

Judging History

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

  • [2024-09-17 19:45:01]
  • 评测
  • 测评结果:WA
  • 用时:21ms
  • 内存:4940kb
  • [2024-09-17 19:45:01]
  • 提交

answer

#include<bits/stdc++.h>
#define int long long
#define mod 1000000007
using namespace std;
const int N = 1005;
int n, m, k;
string s;
int xl, xr, yl, yr;

vector<pair<int, int> > nums;

int mp[N][N];

void solve() {
    cin >> n >> m >> k;
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            mp[i][j] = 0;
        }
    }
    cin >> s;
    xl = 1, xr = n, yl = 1, yr = m;
    int nxl = 1, nxr = n, nyl = 1, nyr = m;
    for (int i = 0; i < s.length(); i++) {
        if (s[i] == 'R') {
            nyl++, nyr++;
            if (nyl > m) {
                if (k == 0)cout << n * m << endl;
                else cout << 0 << endl;
                return;
            }
            if (nyr > m) {
                nyr = m;
                yr--;
            }
        }
        else if (s[i] == 'L') {
            nyl--, nyr--;
            if (nyr < 1) {
                if (k == 0)cout << n * m << endl;
                else cout << 0 << endl;
                return;
            }
            if (nyl < 1) {
                nyl = 1;
                yl++;
            }
        }
        else if (s[i] == 'U') {
            nxl--, nxr--;
            if (nxr < 1) {
                if (k == 0)cout << n * m << endl;
                else cout << 0 << endl;
                return;
            }
            if (nxl < 1) {
                nxl = 1;
                xl++;
            }
        }
        else if (s[i] == 'D') {
            nxl++, nxr++;
            if (nxl > n) {
                if (k == 0)cout << n * m << endl;
                else cout << 0 << endl;
                return;
            }
            if (nxr > n) {
                nxr = n;
                xr--;
            }
        }
    }
    int sum = (yr - yl + 1) * (xr - xl + 1);
    int x = 0, y = 0;
    nums.push_back({ x,y });
    for (int i = 0; i < s.length(); i++) {
        if (s[i] == 'U') {
            x--;
            nums.push_back({ x,y });
        }
        else if (s[i] == 'D') {
            x++;
            nums.push_back({ x,y });
        }
        else if (s[i] == 'L') {
            y--;
            nums.push_back({ x,y });
        }
        else if (s[i] == 'R') {
            y++;
            nums.push_back({ x,y });
        }
    }
	
//	cout<<xl<<" "<<xr<<" "<<yl<<" "<<yr<<endl;
    int mix = 1e18, miy = 1e18;
    for (auto p = nums.begin(); p != nums.end(); p++) {
        mix = min(mix, p->first);
        miy = min(miy, p->second);
    }
    mix--; miy--;
    mix = -mix, miy = -miy;
    for (auto p = nums.begin(); p != nums.end(); p++) {
        mp[p->first + mix][p->second + miy] = 1;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            mp[i][j] = mp[i][j] + mp[i - 1][j] + mp[i][j - 1] - mp[i - 1][j - 1];
          //   cout<<mp[i][j]<<' ';
        }//cout<<endl;
    }
	
    int ans = 0;
    //枚举起点,1,1一直到n,m;
    for (int i = -n; i <= n; i++) {
        for (int j = -m; j <= m; j++) {
        	//放右上角
          //  int xx = i, yy = j;
           // int x = i - (xr - xl), y = j - (yr - yl);
          //  x = max(1ll, x); y = max(1ll, y);
            //if ((mp[xx][yy] + mp[x - 1][y - 1] - mp[x - 1][yy] - mp[xx][y - 1]) == sum - k)ans++;
            //放左上角
            
            int x=i,y=j;
           int xx=i+(xr-xl),yy = j + (yr - yl);
           x = max(1ll, x); y = max(1ll, y);
          xx= max(1ll, xx); yy = max(1ll, yy);
            if(xx>n)xx=n;
            if(yy>m)yy=m;
            
			if ((mp[xx][yy] + mp[x - 1][y - 1] - mp[x - 1][yy] - mp[xx][y - 1]) == sum - k)ans++;
            
          //  cout<<xx<<' '<<yy<< ' '<<x<<' '<<y<<endl;
            
        }
    }
    cout << ans << endl;
    return;
}
signed main() {
    //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int T_case = 1;
    cin >> T_case;
    while (T_case--) {
        solve();
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3728kb

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: 21ms
memory: 4940kb

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
86
9
68
15
33
240
101
0
0
18
25
18
14
6
77
13
18
37
6
6
0
198
30
125
16
77
0
4
8
9
18
6
320
33
10
12
5
12
40
0
27
17
10
32
25
22
22
51
40
13
6
26
53
48
28
8
21
20
27
10
39
24
24
11
20
44
0
37
35
0
4
30
23
30
105
29
71
17
13
66
25
11
28
23
51
21
26
54
28
90
11
9
61
10
48
72
33
62
0
30
46
25
18...

result:

wrong answer 3rd numbers differ - expected: '20', found: '86'