Проблема здесь: 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;
}
scanf
может читать символ новой строки. Я всегда используюfgets
только для того, чтобы избавиться от символа новой строки в конце строки. - person Yuri J   schedule 24.12.2018