Припустимо, що — цілочисловий масив довжини 10^5. Для кожного значення з вхідного списку репресованих встановимо cnt[x] = 1.
Потім потрібно знайти найменший індекс , для якого cnt[i] = 0. Це число і є мінімальним з тих, які відсутні у вхідних даних. Саме буде номером найталановитішого з залишених живими військових.
Приклад
Розглянемо стан масиву після обробки всіх даних вхідного тесту.
Найменшим числом, відсутнім у вхідному масиві, буде , оскільки cnt[5] = 0.
Реалізація алгоритму
Оголосимо масив для підрахунку номерів, які зустрічаються у вхідних даних.
#define MAX 100001
int cnt[MAX];Читаємо вхідні дані. Для кожного значення з списку репресованих встановлюємо cnt[x] = 1.
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &x);
cnt[x] = 1;
}Далі шукаємо найменше невід'ємне ціле число, відсутнє у вхідному списку. Для цього потрібно знайти мінімальне i~(i \ge 0), для якого cnt[i] = 0.
for (i = 0; i < MAX; i++)
if (cnt[i] == 0)
{
printf("%d\n", i);
break;
}Реалізація алгоритму – bitset
Оголошуємо константу і бітовий масив .
#define MAX 100001
bitset<MAX> m;Читаємо вхідні дані. Для кожного значення з списку репресованих встановлюємо m[x] = true.
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &x);
m[x] = true;
}Далі шукаємо найменше невід'ємне ціле число, відсутнє у вхідному списку. Для цього потрібно знайти мінімальне i~(i \ge 0), для якого m[i] = 0.
for (i = 0; i < MAX; i++)
if (!m[i])
{
printf("%d\n", i);
return 0;
}