过样例后,从10分到0分
```cpp
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
return s*w;
}
struct cow{
int x,y;
}a[1000001];
bool cmp1(cow b,cow c){
return b.x<c.x;
}
bool cmp2(cow b,cow c){
return b.y<c.y;
}
int main(){
int ans=0,n=0,cnt=0;
int L=read();int W=read();
for(int i=1;i<=L;i++)
for(int j=1;j<=W;j++){
char ch;cin>>ch;
if(ch=='R')a[++n].x=i,a[n].y=j,cnt++;
}
if(cnt==L*W){
printf("0\n");
}
a[++n].x=0;a[n].y=0;
a[++n].x=L;a[n].y=0;
a[++n].x=0;a[n].y=W;
a[++n].x=L;a[n].y=W;
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++){
int up=W,down=0,wid=L-a[i].x;
for(int j=i+1;j<=n;j++){
if(ans>=wid*(up-down))break;
ans=max(ans,(up-down)*(a[j].x-a[i].x));
if(a[i].y==a[j].y)break;
if(a[j].y>a[i].y)up=min(up,a[j].y);
if(a[j].y<a[i].y)down=max(down,a[j].y);
}
up=W,down=0,wid=a[i].x;
for(int j=i-1;j>=1;j--){
if(ans>=wid*(up-down))break;
ans=max(ans,(up-down)*(a[i].x-a[j].x));
if(a[i].y==a[j].y)break;
if(a[j].y>a[i].y)up=min(up,a[j].y);
if(a[j].y<a[i].y)down=max(down,a[j].y);
}
}
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n-1;i++){
ans=max(ans,(a[i+1].y-a[i].y)*L);
}
printf("%d\n",ans*3);
return 0;
}
```
by PPXppx @ 2018-12-15 10:21:49
@[PPXppx](/user/112164) 1578最多有5000个障碍点,而这个题最多有10^6个障碍点,因此可以卡到10^12,不能通过本题
by Mingxuan @ 2022-08-01 00:19:52