제출 #151679

#제출 시각아이디문제언어결과실행 시간메모리
151679phillipStrah (COCI18_strah)C++14
66 / 110
1067 ms67240 KiB
#include <bits/stdc++.h> using namespace std; int n,m; long double l[2009][2009]; char gr[2009][2009]; long long ans; int main() { cin>>n>>m; for(int i=0; i<n; i++) { cin>>gr[i]; } if(n<m) { for(int i=0; i<n; i++) { for(int j=m-1; j>=0; j--) { if(gr[i][j]=='#')continue; l[i][j]=1+l[i][j+1]; } } for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { if(l[i][j]==0)continue; long double mn=l[i][j]; for(int k=i; k<n; k++) { mn=min(mn,l[k][j]); if(mn==0)break; long double r=(k-i+1); //if(r==1)ans+=(mn*(mn+1))/2; ans+=(((mn*r)+r)/2.0)*mn; } // cout<<i<<" "<<j<<"-> "<<ans<<"\n"; } } } else { for(int i=0; i<m; i++) { for(int j=n-1; j>=0; j--) { if(gr[j][i]=='#')continue; l[j][i]=1+l[j+1][i]; } } for(int j=0; j<m; j++) { for(int i=0; i<n; i++) { if(l[i][j]==0)continue; long double mn=l[i][j]; for(int k=j; k<m; k++) { mn=min(mn,l[i][k]); if(mn==0)break; long double r=(k-j+1); //if(r==1)ans+=(mn*(mn+1))/2; ans+=(((mn*r)+r)/2.0)*mn; } // cout<<i<<" "<<j<<"-> "<<ans<<"\n"; } } } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...