QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#760291 | #5414. Stop, Yesterday Please No More | einekleine18 | RE | 0ms | 3548kb | C++20 | 2.8kb | 2024-11-18 16:01:37 | 2024-11-18 16:01:39 |
Judging History
answer
#include<bits/stdc++.h>
#include <vector>
#define int long long
constexpr int inf=1e18;
void slove(){
int n,m,k;
std::cin>>n>>m>>k;
std::string s;
std::cin>>s;
int x=0,y=0,u=inf,d=-inf,l=inf,r=-inf;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
std::string dir="UDLR";
for(auto &it:s){
int p=0;
for(int i=0;i<4;++i){
if(it==dir[i]){
p=i;
break;
}
}
x+=dx[p];
y+=dy[p];
u=std::min(u,x);
d=std::max(d,x);
l=std::min(l,y);
r=std::max(r,y);
}
u=std::max(1ll,1-u);
d=std::min(n,n-d);
l=std::max(1ll,1-l);
r=std::min(m,m-r);
int cnt=std::max(0ll,d-u+1)*std::max(0ll,r-l+1);
if(cnt<k){
std::cout<<0<<'\n';
return;
}
std::vector g(n*2+5,std::vector<int>(m*2+5));
auto add=[&](int x,int y)->void {
x+=n,y+=m;
if(x<0||x>=n*2+5||y<0||y>=n*2+5) return;
// std::cout<<x<<' '<<y<<'\n';
g[x][y]=1;
};
x=1,y=1;
add(x,y);
for(auto &it:s){
int p=0;
if(it=='U') it='D';
else if(it=='D') it='U';
else if(it=='L') it='R';
else if(it=='R') it='L';
for(int i=0;i<4;++i){
if(it==dir[i]){
p=i;
break;
}
}
x+=dx[p];
y+=dy[p];
add(x,y);
}
for(int i=1;i<n*2+5;++i){
for(int j=0;j<m*2+5;++j){
g[i][j]+=g[i-1][j];
}
}
for(int i=0;i<n*2+5;++i){
for(int j=1;j<m*2+5;++j){
g[i][j]+=g[i][j-1];
}
}
// std::cout<<cnt<<' '<<u<<' '<<d<<' '<<l<<' '<<r<<'\n';
auto query=[&](int sx,int sy)->int {
int ex=sx+std::max(-1ll,d-u),ey=sy+std::max(-1ll,r-l);
if(ex>=n*2+5||ey>=m*2+5) return inf;
return g[ex][ey]-g[sx-1][ey]-g[ex][sy-1]+g[sx-1][sy-1];
};
int ans=0;
for(int i=1;i<n*2+5;++i){
for(int j=1;j<m*2+5;++j){
// std::cout<<i<<' '<<j<<std::endl;
int res=query(i,j);
if(cnt-res==k){
int px=u+(1-(i-n));
int py=l+(1-(j-m));
// std::cout<<i-n<<' '<<j-m<<' '<<res<<'\n';
// std::cout<<px<<' '<<' '<<py<<'\n';
if(px>=1&&py>=1&&px<=n&&py<=m){
++ans;
}
}
}
}
std::cout<<ans<<'\n';
}
signed main(){
#ifdef LOCAL
std::freopen("in.txt","r",stdin);
std::freopen("out.txt","w",stdout);
#endif
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int _=1;
std::cin>>_;
for(int i=0;i<_;++i){
slove();
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3548kb
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
Runtime Error
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...