-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path61201-RT_Sadism.c
More file actions
54 lines (54 loc) · 1.87 KB
/
61201-RT_Sadism.c
File metadata and controls
54 lines (54 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include<bits/stdc++.h>
using namespace std;
#define N 1005
char str[N][N];
long long dpl[N][N];
long long dpr[N][N];
long long qsl[N][N];
long long qsr[N][N];
long long dpcol[N][N];
long long dprow[N][N];
int main()
{
long long n,m,ansm=0,anss=0;
scanf("%lld %lld",&n,&m);
for(long long i=1;i<=n;i++)
{
scanf(" %s",str[i]+1);
for(long long j=1;j<=m;j++)
{
dpcol[i][j]=dpcol[i-1][j]+qsl[i-1][j]-qsl[i-1][j-1];
dprow[i][j]=dprow[i][j-1]+qsl[i][j-1]-qsl[i-1][j-1];
qsl[i][j]=qsl[i-1][j]+qsl[i][j-1]-qsl[i-1][j-1]+(str[i][j]=='M');
dpl[i][j]=dpl[i-1][j-1]+dpcol[i][j]+dprow[i][j]+qsl[i-1][j-1];
if(str[i][j]=='M') ansm+=dpl[i][j];
}
for(long long j=m;j>=1;j--)
{
dprow[i][j]=dprow[i][j+1]+qsr[i][j+1]-qsr[i-1][j+1];
qsr[i][j]=qsr[i-1][j]+qsr[i][j+1]-qsr[i-1][j+1]+(str[i][j]=='M');
dpr[i][j]=dpr[i-1][j+1]+dpcol[i][j]+dprow[i][j]+qsr[i-1][j+1];
if(str[i][j]=='M') ansm+=dpr[i-1][j+1]+qsr[i-1][j+1];
}
}
for(long long i=1;i<=n;i++)
{
for(long long j=1;j<=m;j++)
{
dpcol[i][j]=dpcol[i-1][j]+qsl[i-1][j]-qsl[i-1][j-1];
dprow[i][j]=dprow[i][j-1]+qsl[i][j-1]-qsl[i-1][j-1];
qsl[i][j]=qsl[i-1][j]+qsl[i][j-1]-qsl[i-1][j-1]+(str[i][j]=='S');
dpl[i][j]=dpl[i-1][j-1]+dpcol[i][j]+dprow[i][j]+qsl[i-1][j-1];
if(str[i][j]=='S') anss+=dpl[i][j];
}
for(long long j=m;j>=1;j--)
{
dprow[i][j]=dprow[i][j+1]+qsr[i][j+1]-qsr[i-1][j+1];
qsr[i][j]=qsr[i-1][j]+qsr[i][j+1]-qsr[i-1][j+1]+(str[i][j]=='S');
dpr[i][j]=dpr[i-1][j+1]+dpcol[i][j]+dprow[i][j]+qsr[i-1][j+1];
if(str[i][j]=='S') anss+=dpr[i-1][j+1]+qsr[i-1][j+1];
}
}
printf("%lld %lld\n",ansm,anss);
return 0;
}