Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2021-05-30 09:33:16.
Revizia anterioară   Revizia următoare  

 

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 celor două matrice, C = AB. Să se afişeze restul împărţirii la 216 a sumei numerelor matricei C.

Date de intrare

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

// unsigned short A[n][n], B[n][n], x;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        A[i][j] = x;
        x = 3 + 23 * x;
    }
}
for (int j = 0; j < n; j++) {
    for (int i = 0; i < n; i++) {
        B[i][j] = x;
        x = 3 + 23 * x;
    }
}

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;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        ans = 23 * ans + C[i][j];
    }
}
// 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 7
5120

Hint în alb

Caută titlul pe Google.

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?