样例过了,10分,除了一个点全部WA
本蒟蒻是fw
QAQ
//B4263 [GESP202503 四级] 荒地开垦
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <iomanip>
#ifdef _WIN32
#include <windows.h>
#endif
#ifdef _WIN32
void sleep(int uSleepTime)
{
Sleep(uSleepTime);
}
#else
void sleep(int uSleepTime){}
#endif
using namespace std;
struct CPos;
std::vector<std::vector<int>> g_vecMap;
std::vector<CPos> g_vecUb;
int nX, nY;
bool IsInit(int X, int Y)
{
if (g_vecMap[X][Y] == 1)
{
return false;
}
return (!g_vecMap[X - 1][Y]) &&
(!g_vecMap[X + 1][Y]) &&
(!g_vecMap[X][Y - 1]) &&
(!g_vecMap[X][Y + 1]);
}
bool IsInMap(int X, int Y)
{
return ((X >= 2) &&
(X < (nX + 2)) &&
(Y >= 2) &&
(Y < (nY + 2)));
}
struct CPos
{
CPos();
CPos(int Initx, int Inity)
{
X = Initx;
Y = Inity;
}
int CaclNum();
int X;
int Y;
};
int CPos::CaclNum()
{
int nCount = 1;
g_vecMap[X][Y] = 0;
if (IsInit(X - 1, Y)
&&IsInMap(X - 1,Y))
++nCount;
if (IsInit(X + 1, Y)
&& IsInMap(X + 1, Y))
++nCount;
if (IsInit(X, Y - 1)
&& IsInMap(X, Y - 1))
++nCount;
if (IsInit(X, Y + 1)
&& IsInMap(X, Y + 1))
++nCount;
g_vecMap[X][Y] = 1;
return nCount;
}
int main()
{
//freopen("F:\\便捷输入.txt", "r", stdin);
int ans = 0, highest = 0;
g_vecMap.resize(1010);
for (int i = 0; i < 1010;++i)
{
g_vecMap[i].resize(1010);
}
std::cin >> nY >> nX;
for (int y = 0; y < nY; ++y)
{
for (int x = 0; x < nX; ++x)
{
char ch;
std::cin >> ch;
if (ch == '.')
{
g_vecMap[x + 2][y + 2] = 0;
}
else
{
g_vecMap[x + 2][y + 2] = 1;
g_vecUb.push_back(CPos(x + 2, y + 2));
}
}
}
for (int y = 0; y < nY; ++y)
{
for (int x = 0; x < nX; ++x)
{
if (IsInit(x + 2, y + 2))
{
++ans;
}
}
}
for (std::vector<CPos>::size_type i = 0; i < g_vecUb.size(); ++i)
{
int tmp = g_vecUb[i].CaclNum();
if (tmp>highest)
{
highest = tmp;
}
}
ans += highest;
std::cout << ans;
return 0;
}