QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#693274#5414. Stop, Yesterday Please No MorelselegiesWA 6ms12252kbC++142.0kb2024-10-31 15:52:102024-10-31 15:52:10

Judging History

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

  • [2024-10-31 15:52:10]
  • 评测
  • 测评结果:WA
  • 用时:6ms
  • 内存:12252kb
  • [2024-10-31 15:52:10]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=2e3+5,M=1e6+5;
int dis[N][N],pre[N][N],a[M],base[N][N];
int sum;
signed main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,m,K;
		cin>>n>>m>>K;
		for (int i=1;i<=n;i++)
			for (int j=1;j<=m;j++)
			{
				pre[i][j]=0;
				dis[i][j]=0;
				base[i][j]=0;
			}
		string s;
		cin>>s;
		
		int len=s.size();
		s=" "+s;
		for (int i=1;i<=len;i++)
			a[i]=0;
		
		int lr=0,ud=0,ll=0,rr=0,uu=0,dd=0;
		for (int i=1;i<=len;i++)
		{
			if (s[i]=='U') 
			{
				a[i]=1;
				ud++;
				uu=max(uu,ud);
			}
			else if (s[i]=='D') 
			{
				a[i]=2;
				ud--;
				dd=min(dd,ud);
			}
			else if (s[i]=='L') 
			{
				a[i]=3;
				lr--;
				ll=min(ll,lr);
			}
			else 
			{
				a[i]=4;
				lr++;
				rr=max(rr,lr);
			}	
		} 
		sum=0;
		//cout<<uu<<' '<<dd<<' '<<ll<<' '<<rr<<endl;
		for (int i=1+uu;i<=n+dd;i++)
			for (int j=1-ll;j<=m-rr;j++)		
				sum++;
		//sum=(n+dd)
		//cout<<sum<<endl;
		if (K==0)
		{
			cout<<n*m<<endl;
			continue;
		}	
		else if (sum<K) 
		{
			cout<<0<<endl;	
			continue;
		}	
		int x=1+uu,y=1-ll;
		base[x][y]=1;
		for(int i=1;i<=len;i++)
		{
			
			if (a[i]==1) x--;
			if (a[i]==2) x++;
			if (a[i]==3) y--;
			if (a[i]==4) y++;
			if (base[x][y]) continue;	
			base[x][y]=1; 
		} 
		int xx=n+dd-uu,yy=m-rr+ll;	
		for (int k=1;k<=n;k++)
			for (int l=1;l<=m;l++)
			{
				if (base[k][l]) 
				{
					dis[k][l]++;
					dis[k+xx][l]--;
					dis[k][l+yy]--;
					dis[k+xx][l+yy]++;
				}
			}
//		for (int i=1;i<=n;i++)
//		{
//			for (int j=1;j<=m;j++)
//				cout<<dis[i][j]<<' ';
//			cout<<endl;
//		}
		
			
		for (int i=1;i<=n;i++)
			for (int j=1;j<=m;j++)
			pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+dis[i][j];
//		for (int i=1;i<=n;i++)
//		{
//			for (int j=1;j<=m;j++)
//				cout<<pre[i][j]<<' ';
//			cout<<endl;
//		}	
		int res=0;
		for (int i=1;i<=n;i++)
			for (int j=1;j<=m;j++)
			if(sum-pre[i][j]==K) res++;
		cout<<res<<endl;
	}
 } 

詳細信息

Test #1:

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

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: 6ms
memory: 12252kb

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
99
18
15
34
240
15
0
0
13
14
18
26
16
1
19
108
8
2
2
3
7
0
30
16
21
0
8
10
9
15
5
320
11
7
3
0
0
12
0
11
0
0
14
0
22
36
51
23
7
6
4
2
48
28
8
63
22
49
13
10
4
108
10
18
44
0
15
9
0
4
30
14
99
105
10
14
17
0
66
10
11
28
52
34
56
33
14
56
90
14
0
121
3
48
30
36
13
0
30
7
8
3
11
16
45
20
34
0...

result:

wrong answer 606th numbers differ - expected: '1', found: '24'