由于比赛时,现场敲的代码比较乱,这是整理过的版本;模拟题,注意一下字符串数据的输入,用递归求解重叠(扩散)的部分。
//模板开始
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <fstream>
#include <map>
#include <set>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include<iomanip>
#define SZ(x) (int(x.size()))
using namespace std;
int toInt(string s){
istringstream sin(s);
int t;
sin>>t;
return t;
}
template<class T> string toString(T x){
ostringstream sout;
sout<<x;
return sout.str();
}
typedef long long int64;
int64 toInt64(string s){
istringstream sin(s);
int64 t;
sin>>t;
return t;
}
template<class T> T gcd(T a, T b){
if(a<0)
return gcd(-a, b);
if(b<0)
return gcd(a, -b);
return (b == 0)? a : gcd(b, a % b);
}
//模板结束(通用部分)
//厦大校赛现场赛(网宿科技杯厦大第十届校赛)
//A题、1480.十
#define MAX_ROW 205
#define MAX_COLUMN 205
int panduan(char tuAn[][205], int i, int j, int index, int n, int m, int count)
{
if(index + i >= n || i - index <= -1 || j + index >= m || j - index <= -1)
{
return count;
}
if(tuAn[i - index][j] == '*' && tuAn[i + index][j] == '*' && tuAn[i][j - index] == '*' && tuAn[i][j + index] == '*')
{
count++;
count = panduan(tuAn, i, j, index + 1, n, m, count);
return count;
}
else
{
return count;
}
}
int main()
{
ifstream ifs("shuju.txt", ios::in);
int n, m;
//ifs>>n>>m;
cin>>n>>m;
char tuAn[MAX_ROW][MAX_COLUMN];
int count;
//ifs.getline(tuAn[0], 204);
//cin.getline(tuAn[0], 204);
//ifs.ignore();
cin.ignore(204, '\n');
for(int k = 0; k < n; k++)
{
//ifs.getline(tuAn[k], 204);
cin.getline(tuAn[k], 205);
}
//cout<<n<<m<<endl;
/*for(int k = 0; k < n; k++)
{
cout<<tuAn[k]<<endl;
}*/
count = 0;
int i;
int j;
for(i = 1; i < n - 1; i++)
{
for(j = 1; j < m - 1; j++)
{
if(tuAn[i][j] == '*')
{
int index = 1;
count = panduan(tuAn, i, j, index, n, m, count);
}
}
}
cout<<count<<endl;
return 0;
}