Fişierul intrare/ieşire:simd.in, simd.outSursăad-hoc
AutorAlexandru PetrescuAdăugată dealexpetrescuAlexandru Petrescu alexpetrescu
Timp execuţie pe test4.5 secLimită de memorie512000 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Single Instruction Multiple Data

Se consideră două matrice A şi B de ordin n, formate din întregi cu valori de la 0 la 216-1. Să se calculeze produsul modulo 216 al celor două matrice, C = AB (mod 216).

Date de intrare

Fişierul de intrare simd.in conţine numerele n, mod şi num. Matricele A şi B se pot construi aşa:

// unsigned short A[n][n], B[n][n], num;
// unsigned int mod;
assert(mod < 65536);
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        num = 5 * num + 1;
        A[i][j] = (mod * num) >> 16;
    }
}
for (int j = 0; j < n; j++) {
    for (int i = 0; i < n; i++) {
        num = 5 * num + 1;
        B[i][j] = (mod * num) >> 16;
    }
}

Observaţi că parcurgerea matricei B este diferită de cea a matricei A.

Date de ieşire

În fişierul de ieşire simd.out se află un număr care poate fi obţinut, din matricea C, astfel:

// unsigned short C[n][n];
unsigned short ans = 0, coef = 1;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        ans ^= coef * C[i][j];
        coef *= 23;
    }
}
// print ans

Restricţii

#testn
1248
2504
3760
41016
51272
61528
71784
82040
92296
102552

Observaţie

Problema nu propune găsirea vreunui artificiu matematic care să simplifice rezolvarea.

Exemplu

simd.insimd.out
24 2533 23876
47906

Hint în alb

Caută titlul pe Google.

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?