hdu 4517 小小明系列故事——遊戲的煩惱
阿新 • • 發佈:2019-02-05
將二維陣列優化為一維陣列的DP可以加快速度!!!糾結中
AC:
time limit:#include<cstdlib> #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<set> #include<map> #include<list> #include<queue> #include<vector> #define LL long long #define inf 0x7fffffff #define E 1e-9 #define M 100 #define N 2001 using namespace std; int m,n; char str[N][N]; int up[N]; int fun(int x,int y) { int cnt=0; for(int j=0; j<m; ++j) { if(up[j]>=x) { int num=1;j++; while(j<m&&up[j]>=x)num++,j++; if(num>=y)cnt+=num-y+1; } } return cnt; } int main() { #ifndef ONLINE_JUDGE freopen("ex.in","r",stdin); #endif while(scanf("%d%d",&n,&m)==2&&(n||m)) { int x,y; scanf("%d%d",&x,&y); for (int i=0; i<n; ++i ) scanf("%s",str[i]); memset(up,0,sizeof(up)); int cnt=0; for (int i=0; i<n; ++i ) { for(int j=0; j<m; ++j) if(str[i][j]=='*') up[j]++; else up[j]=0; cnt+=fun(x,y); if(x!=y) cnt+=fun(y,x); } printf("%d\n",cnt); } return 0; }
#include<cstdlib> #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<set> #include<map> #include<list> #include<queue> #include<vector> #define LL long long #define inf 0x7fffffff #define E 1e-9 #define M 100 #define N 2001 using namespace std; int m,n; char str[N][N]; int c[N][N],up[N][N]; int fun(int x,int y) { memset(c,0,sizeof(c)); int cnt=0; for(int i=x-1; i<n; i++) for(int j=0; j<m; ++j) { if(up[i][j]>=x) c[i][j]=(j==0)?1:c[i][j-1]+1; else c[i][j]=0; if(c[i][j]>=y)cnt++; } return cnt; } int main() { #ifndef ONLINE_JUDGE freopen("ex.in","r",stdin); #endif while(scanf("%d%d",&n,&m)==2&&(n||m)) { int x,y; scanf("%d%d",&x,&y); for (int i=0; i<n; ++i ) scanf("%s",str[i]); memset(up,0,sizeof(up)); for(int j=0; j<m; ++j) for (int i=0; i<n; ++i ) if(str[i][j]=='*') up[i][j]=(i==0)?1:up[i-1][j]+1; else up[i][j]=0; int cnt=fun(x,y); if(x!=y) cnt+=fun(y,x); printf("%d\n",cnt); } return 0; }