Revizia anterioară Revizia următoare
| Fişierul intrare/ieşire: | simd.in, simd.out | Sursă | ad-hoc |
| Autor | Alexandru Petrescu | Adăugată de | |
| Timp execuţie pe test | 4.5 sec | Limită de memorie | 512000 kbytes |
| Scorul tău | N/A | Dificultate | N/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 ansRestricţii
| #test | n |
|---|---|
| 1 | 248 |
| 2 | 504 |
| 3 | 760 |
| 4 | 1016 |
| 5 | 1272 |
| 6 | 1528 |
| 7 | 1784 |
| 8 | 2040 |
| 9 | 2296 |
| 10 | 2552 |
Observaţie
Problema nu propune găsirea vreunui artificiu matematic care să simplifice rezolvarea.
Exemplu
| simd.in | simd.out |
|---|---|
| 24 7 | 5120 |
Hint în alb
Caută titlul pe Google.
