BZOJ 1201 數三角形
阿新 • • 發佈:2018-06-09
+= scan turn ont %d puts () int CA
暴力
枚舉底邊
預處理左右延伸長度
註意標號
蒟蒻我分不清l,r
#include <cstdio> const int MAXN=1011; int N; int Map[3][MAXN][MAXN]; int Cnt[3][2][MAXN][MAXN]; int main(){ scanf("%d", &N); for(int i=1;i<=N;++i){ for(int j=1, a, b, c;j<=i;++j){ scanf("%d%d%d", &a, &b, &c); Map[0][i][j]=c; Map[2][N-j+1][i-j+1]=a; Map[1][N-i+j][N-i+1]=b; } } for(int k=0, c;k<3;++k){ for(int i=1;i<=N;++i){ c=0; for(int j=1;j<=i;++j){ if(!Map[k][i][j]) c=0; else ++c; Cnt[k][0][i][j]=c; } } } for(int k=0, c;k<3;++k){ for(int i=1;i<=N;++i){ c=0; for(int j=i;j>=1;--j){ if(!Map[k][i][j]) c=0; else ++c; Cnt[k][1][i][j]=c; } } } /* for(int k=0;k<3;++k){ for(int i=1;i<=N;++i){ for(int j=1;j<=i;++j){ printf("%d ", Cnt[k][1][i][j]); } puts(""); } puts(""); } */ long long ANS=0LL; for(int i=1, d;i<=N;++i){ for(int l=0;l<i;++l){ for(int r=l+1;r<=i;++r){ d=r-l; if(Cnt[0][0][i][r]<d) continue; if(Cnt[1][1][N-i+r][N-i+1]>=d && Cnt[2][0][N-l][i-l]>=d){ ANS+=1LL; //printf("%d %d %d u\n", i, l, r); } if(Cnt[2][1][N-r][i-r+1]>=d && Cnt[1][0][N-i+l][N-i]>=d){ ANS+=1LL; //printf("%d %d %d d\n", i, l, r); } } } } printf("%lld\n", ANS); return 0; } /* 5 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 19 */
BZOJ 1201 數三角形