Source Code
Problem: 1382 User: 20220556****
Memory: 1388K Time: 625MS
Language: G++ Result: Accepted
Source Code
#include <stdio.h>
int token(int a[200][200], int sqrow, int sqline, int size)
{
int sum = 0;
int row = sqrow * 2 - 1;
int line = sqline;
for (int i = 0; i < size; i++)
{
if (a[row][line + i] == 1)
sum++;
else
break;
if (a[row + 2 * size][line + i])
sum++;
else
break;
}
if (sum != 2 * size)
return 0;
int temprow = row + 1;
for (int i = 1; i <= size; i++)
{
if (a[temprow][line] == 1)
sum++;
else
break;
if (a[temprow][line + size] == 1)
sum++;
else
break;
temprow += 2;
}
if (sum == 4 * size)
return 1;
else
return 0;
}
void xuhao(int xu, int *row, int *line, int side)
{
int i, countrow = 1, countline;
for (i = 0; i < 2 * side + 1; i++)
{
if (xu - side > 0)
{
xu = xu - side;
countrow++;
}
else
{
countline = xu;
}
if (xu - (side + 1) > 0)
{
xu = xu - (side + 1);
countrow++;
}
else
{
countline = xu;
break;
}
}
*row = countrow;
*line = countline;
}
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
int ram[200][200] = {0};
int side;
scanf("%d", &side);
for (int i = 1; i <= 2 * side + 1; i += 2)
{
for (int j = 1; j <= side; j++)
{
ram[i][j] = 1;
}
}
for (int i = 2; i <= 2 * side; i += 2)
{
for (int j = 1; j <= side + 1; j++)
{
ram[i][j] = 1;
}
}
// for (int i = 1; i <= 2 * side + 1; ++i)
// {
// for (int j = 1; j <= side + 1; ++j)
// {
// printf("%d ",ram[i][j]);
// }
// putchar('\n');
// }
int input[10000] = {0};
int countin;
scanf("%d", &countin);
for (int i = 0; i < countin; ++i)
{
scanf("%d", &input[i]);
}
int row, line;
for (int i = 0; i < countin; ++i)
{
xuhao(input[i], &row, &line, side);
ram[row][line] = 0;
}
// for (int i = 1; i <= 2 * side + 1; ++i)
// {
// for (int j = 1; j <= side + 1; ++j)
// {
// printf("%d ", ram[i][j]);
// }
// putchar('\n');
// }
int sum = 0;
for (int i = 1; i <= side; i++)
{
for (int j = 1; j <= side-i+1; j++)
{
for (int k = 1; k <= side-i+1; k++)
{
sum += token(ram, j, k, i);
}
}
}
printf("%d\n", sum);
}
return 0;
}
暴力搜索,