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 ans
Restricţ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.