ciao, avete hint per questo problema? grazie mille
https://training.olinfo.it/#/task/ois_beta/statement
Ovviamente puoi tenere conto in un array di quante volte un numero è uscito. Per farlo ti servirano 2 \cdot 10^9 \text{ bits} = 250 \cdot 10^6 \text{ B}, che è convenientemente meno del limite di memoria del problema.
Ecco un’implementazione in C:
#include <stdio.h>
#include <stdlib.h>
int main() {
int N; scanf("%d", &N);
unsigned char *skill_issue = calloc(250000000, 1);
int cnt = 0;
while (N--) {
int x; scanf("%d", &x);
x--;
switch ((skill_issue[x >> 2] >> 2 * (x & 3)) & 3) {
case 0: skill_issue[x >> 2] |= (1 << 2 * (x & 3)); break;
case 1: skill_issue[x >> 2] |= (1 << 2 * (x & 3) + 1); cnt++; break;
}
}
free(skill_issue);
puts(cnt > 1 ? "YES" : "NO");
}
2 Mi Piace
Ti sei dimenticato di castare a unsigned char *
il valore di ritorno di calloc
→ SKILL ISSUE
1 Mi Piace