| 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 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 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 2533 23876 | 47906 |
Hint în alb
Caută titlul pe Google.
