Codeforces: "Б. 8 Королев снова"
Проблема здесь: B. 8 Королев, Опять!!
Я думаю, что я не получаю худшие случаи или пропускаю что-то. Моя заявка не прошла в тесте 2.
Я только что проверил строки, столбцы и диагонали для каждого ввода со своими следующими. Я думал, что этого будет достаточно. Есть ли другой случай, когда он может быть действительным или недействительным? Я не уверен, что мой код все правильно, хотя.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t, y[9], x[9], i, j, valid;
scanf("%d", &t);
while(t--)
{
valid = 1;
for(i = 0; i < 8; i++)
{
scanf(" %c %d", &x[i], &y[i]);
}
for(i = 0; i < 8; i++)
{
for(j = i+1; j < 8; j++)
{
if(x[i] == x[j] || y[i] == y[j] || abs(x[i] - x[j]) == abs(y[i]-y[j])) valid = 0;
}
}
(valid) ? printf("Valid\n") : printf("Invalid\n");
}
return 0;
}
1 ответ
Вы scanf
ввод символа координат во входном файле в int
,
for(i = 0; i < 8; i++)
{
char row;
scanf("%1c%1d ", &row, &y[i]);
x[i] = row - 'A';
}
int
вероятно 4 или 8 байт. Поскольку они являются локальными, их содержимое не определено, пока не установлено. Символ переходит в первый байт, остальные байты все еще не определены. Это может сработать, а может и нет. Кроме того, это никогда не будет работать на машинах с прямым порядком байтов, поскольку вы храните его в старшем байте, а не в младшем. Смотрите: порядок байтов
Убедитесь, что ваши типы аргументов согласуются с scanf
строка. Возможно, ваш компилятор дал вам предупреждение о warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int *’
; если так, то это то, что он пытался вам сказать.