【Codeforce 1461B】 Find the Spruce
传送门
题意
给定一个字符串矩阵,如果是符号*,每个组成三角形状的都算做一个树,统计数量
数据范围
\(1\leq t\leq 10\)
\(1\leq n,m\leq 500\)
题解
树的形状一定是三角形的,其中每个单独的点也算一种,枚举每个点作为三角形头,统计数量即可
时间复杂度\(O(n^{3})\)
Code
#include<bits/stdc++.h>
using namespace std;
const int N=510;
char s[N][N];
int sum[N][N];
void solve(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>s[i]+1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
sum[i][j]=sum[i][j-1];
if(s[i][j]=='*') sum[i][j]++;
}
int res=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=1;;k++){
int lv=i+k-1,l=j-k+1,r=j+k-1;
if(lv<=n && l>=1 && r<=m && sum[lv][r]-sum[lv][l-1]==r-l+1) res++;
else break;
}
cout<<res<<endl;
}
int main(){
int _;cin>>_;
while(_--) solve();
}

浙公网安备 33010602011771号