P9908 [COCI 2023/2024 #2] Pahuljice 题解
数据范围很小,考虑直接暴力枚举每个雪花中心,计算这个雪花的大小,然后更新答案。
怎么计算雪花的大小?从中心开始逐渐向外扩展,如果碰到边缘或者哪一圈的字符不符合雪花定义,就退出循环。
下面的代码为了看着清晰,有些内容被判断了多次,如 i-s>=0 就被判断了
需要注意的是,因为 \ 是转义字符,所以要用 '\\' 表示字符 \。
#include<bits/stdc++.h>
using namespace std;
char c[50][50];
int main(){
ios::sync_with_stdio(false);
int n,m;cin>>n>>m;
for(int i=0;i<n;i++){
cin>>c[i];
}//输入
int mx=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(c[i][j]=='+'){//如果是中心
int x=0;
for(int s=1;;s++){//向外扩展
if(i-s>=0&&j-s>=0&&c[i-s][j-s]=='\\'//左上
&&i-s>=0&& c[i-s][j]=='|' //上
&&i-s>=0&&j+s<m &&c[i-s][j+s]=='/' //右上
&& j-s>=0&&c[i][j-s]=='-' //左
&& j+s<m &&c[i][j+s]=='-' //右
&&i+s<n &&j-s>=0&&c[i+s][j-s]=='/' //左下
&&i+s<n && c[i+s][j]=='|' //下
&&i+s<n &&j+s<m &&c[i+s][j+s]=='\\'//右下
){
x++;
}else{
break;
}
}
mx=max(mx,x);
}
}
}
cout<<mx;
return 0;
}