CF D
unknown
c_cpp
7 months ago
2.7 kB
4
Indexable
#include <cstdio>
const int SIZE = 1001;
int n_TotCase;
int n_SizeX;
int n_SizeY;
int n_Ans;
int n_Cnt;
int n_First[3];
int n_Map[SIZE][SIZE];
int n_CheckNum;
bool Out_of_Range(int n_PosX, int n_PosY, int n_Range);
int main()
{
scanf("%d", &n_TotCase);
while (n_TotCase--)
{
scanf("%d %d", &n_SizeX, &n_SizeY);
for (int i = 1; i <= n_SizeX; i++)
{
for (int j = 1; j <= n_SizeY; j++)
{
scanf("%1d", &n_Map[i][j]);
}
}
int n_PosX = 1;
int n_PosY = 1;
n_Ans = 0;
int n_Min = n_SizeX > n_SizeY ? n_SizeY : n_SizeX;
n_Min >>= 1;
for (int i = 1; i <= n_Min; i++)
{
n_PosX = i;
n_PosY = i;
n_CheckNum = 0;
n_Cnt = 0;
while (!Out_of_Range(n_PosX, n_PosY, i))
{
n_CheckNum = (n_CheckNum * 10 + n_Map[n_PosX][n_PosY]) % 10000;
if (n_CheckNum == 1543)
{
n_Ans++;
}
if (n_Cnt < 3)
{
n_First[n_Cnt] = n_Map[n_PosX][n_PosY];
}
n_Cnt++;
n_PosY++;
}
n_PosY--;
while (!Out_of_Range(n_PosX, n_PosY, i))
{
if (n_PosX == i)
{
n_PosX++;
}
n_CheckNum = (n_CheckNum * 10 + n_Map[n_PosX][n_PosY]) % 10000;
if (n_CheckNum == 1543)
{
n_Ans++;
}
if (n_Cnt < 3)
{
n_First[n_Cnt] = n_Map[n_PosX][n_PosY];
}
n_Cnt++;
n_PosX++;
}
n_PosX--;
while (!Out_of_Range(n_PosX, n_PosY, i))
{
if (n_PosY == n_SizeY + 1 - i)
{
n_PosY--;
}
n_CheckNum = (n_CheckNum * 10 + n_Map[n_PosX][n_PosY]) % 10000;
if (n_CheckNum == 1543)
{
n_Ans++;
}
if (n_Cnt < 3)
{
n_First[n_Cnt] = n_Map[n_PosX][n_PosY];
}
n_Cnt++;
n_PosY--;
}
n_PosY++;
while (!Out_of_Range(n_PosX, n_PosY, i) && n_PosX != i)
{
if (n_PosX == n_SizeX + 1 - i)
{
n_PosX--;
if (n_PosX == i)
{
break;
}
}
n_CheckNum = (n_CheckNum * 10 + n_Map[n_PosX][n_PosY]) % 10000;
if (n_CheckNum == 1543)
{
n_Ans++;
}
if (n_Cnt < 3)
{
n_First[n_Cnt] = n_Map[n_PosX][n_PosY];
}
n_Cnt++;
n_PosX--;
}
for (int j = 0; j < 3; j++)
{
n_CheckNum = (n_CheckNum * 10 + n_First[j]) % 10000;
if (n_CheckNum == 1543)
{
n_Ans++;
}
}
}
printf("%d\n", n_Ans);
}
return 0;
}
bool Out_of_Range(int n_PosX, int n_PosY, int n_Range)
{
if (n_PosX < n_Range || n_PosY < n_Range)
{
return true;
}
if ((n_PosX > n_SizeX - n_Range + 1) || (n_PosY > n_SizeY - n_Range + 1))
{
return true;
}
return false;
}Editor is loading...
Leave a Comment