QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#629228 | #5414. Stop, Yesterday Please No More | travel | WA | 4ms | 4332kb | C++14 | 2.9kb | 2024-10-11 09:27:04 | 2024-10-11 09:27:04 |
Judging History
answer
//
// Created by travel on 2024/10/10.
//
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e3 + 10;
int g[N][N],T,n,m,k;
void add(int a,int b,int c,int d){
g[a][b]++; g[a][d + 1]--;
g[c + 1][b]--;g[c + 1][d + 1]++;
}
void solve(){
cin>>n>>m>>k;
// 实际的矩阵边界索引
int row1 = 1,row2 = n,col1 = 1,col2 = m;
for(int i = 0;i <= n + 1;i++)
for(int j = 0;j <= m + 1;j++)
g[i][j] = 0;
// 四个边界所在矩阵的位置
int row3 = 1,row4 = n,col3 = 1,col4 = m;
string s; cin>>s;
bool flag = 0;
for(int i = 0;i < s.size();i++)
{
if(s[i] == 'U') {
if(row3 == 1)
row1++;
if(row4 == 1) {
flag = 1;
break;
}
row3 = max(1ll,row3 - 1),row4 = max(1ll,row4 - 1);
}
if(s[i] == 'D'){
if(row4 == n)
row2--;
// row3++,row4++;
if(row3 == n)
{
flag = 1;
break;
}
row3 = min(n,row3 + 1),row4 = min(n,row4 + 1);
}
if(s[i] == 'L'){
if(col3 == 1)
col1++;
// col3--,col4--;
if(col4 == 1){
flag = 1;
break;
}
col3 = max(1ll,col3 - 1),col4 = max(1ll,col4 - 1);
}
if(s[i] == 'R')
{
if(col4 == m)
col2--;
// col3++,col4++;
if(col3 == m){
flag = 1;
break;
}
col3 = min(m,col3 + 1),col4 = min(m,col4 + 1);
}
}
// cout<<"ok"<<endl;
int res = 0;
// cout<<row1<<' '<<row2<<' '<<col1<<' '<<col2<<endl;
if(row1 > row2 || col1 > col2 || flag)
{
if(k) cout<<0<<endl;
else cout<<m * n <<endl;
return ;
}
else res = (row2 - row1 + 1) * (col2 - col1 + 1) - k;
// cout<<"res = "<<res<<endl;
if(res < 0){
cout<<0<<endl;
return ;
}
add(row1,col1,row2,col2);
for(int i = 0;i < s.size();i++){
if(s[i] == 'U')
row1--,row2--;
if(s[i] == 'D')
row1++,row2++;
if(s[i] == 'L')
col1--,col2--;
if(s[i] == 'R')
col1++,col2++;
add(row1,col1,row2,col2);
}
int cnt = 0;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
g[i][j] +=g[i - 1][j] + g[i][j - 1] - g[i - 1][j - 1];
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++)
if(g[i][j] == res - k)
cnt++;
}
cout<<cnt<<endl;
}
signed main(){
cin>>T;
while(T--)
solve();
return 0;
}
/*
*
3
4 5 3
ULDDRR
4 5 0
UUUUUUU
4 5 10
UUUUUUU
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3620kb
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: 4ms
memory: 4332kb
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 0 0 0 15 0 240 0 0 0 0 0 18 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 9 8 0 320 0 0 0 0 0 0 0 0 0 0 0 0 22 0 51 0 5 6 0 0 48 28 8 0 0 0 0 0 0 0 0 0 44 0 0 0 0 4 30 0 0 105 0 0 17 0 66 0 11 28 0 0 0 0 0 0 90 0 0 0 4 48 0 0 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 0 0 225 0 0 0 0 11 0 90 0 0 228 0 3...
result:
wrong answer 3rd numbers differ - expected: '20', found: '0'