CF D
unknown
c_cpp
19 days ago
2.7 kB
2
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