// CSR <br/> # include <iostream> <br/> # include <algorithm> <br/> # include <time. h> <br/> using namespace STD; <br/> const int maxm = 1500002; <br/> const int maxn = 1500002; <br/> const int matsize = 30000000; <br/> int row, Col, nnz; <br/> const int testtime = 1; <br/> int row_start [maxm]; <br/> int col_idx [matsize]; <br/> double value [matsize]; <br/> int row_tmp [maxm]; <br/> double MV [maxm]; <br/> double RET [maxm]; <br/> typedef struct {<br/> int R, C; <br/> double val; <br/>} coo; <br/> coo mat [matsize]; <br/> bool CMP (coo a, coo B) {<br/> If (. R = B. r) <br/> return. c <B. c; <br/> return. r <B. r; <br/>}< br/> void readmatrix () {<br/> file * fp = freopen ("matrix. CTX "," r ", stdin); <br/> scanf (" % d ", & Col, & Row, & nnz); // column, row, element value <br/> memset (MAT, 0, sizeof (MAT); <br/> for (INT I = 0; I <nnz; I ++) <br/>{< br/> scanf ("% d % lf", & mat [I]. c, & mat [I]. r, & mat [I]. val); <br/> mat [I]. r --; <br/> mat [I]. C --; <br/>}< br/> fclose (FP); <br/> fp = freopen ("matrix_ B .ctx", "r", stdin ); <br/> scanf ("% d", & col); <br/> for (INT I = 0; I <Col; I ++) <br/>{< br/> scanf ("% lf", & mv [I]); <br/>}< br/> fclose (FP ); <br/>}< br/> void convertmatrix () {<br/> for (INT I = 0; I <nnz; I ++) {<br/> value [I] = mat [I]. val; <br/> col_idx [I] = mat [I]. c; <br/> row_tmp [Mat [I]. r] ++; <br/>}< br/> for (INT I = 1; I <row + 1; I ++) {<br/> row_start [I] = row_tmp [I-1] + row_start [I-1]; <br/>}< br/> long MUL () {<br/> memset (Ret, 0, sizeof (RET )); <br/> int T = testtime; <br/> clock_t tstart, tend; <br/> int S, T; <br/> tstart = clock (); <br/> while (t --) {<br/> for (INT I = 0; I <row; I ++) {<br/> S = row_start [I]; t = row_start [I + 1]; <br/> for (Int J = s; j <t; j ++) {<br/> // printf ("(% d, % d)", I, col_idx [J]); <br/> RET [I] + = value [J] * MV [col_idx [J]; <br/>}< br/> // printf ("/N"); <br/>}< br/> tend = clock (); <br/> return tend-tstart; <br/>}< br/> int main () {<br/> readmatrix (); <br/> convertmatrix (); <br/> long timecost = MUL (); <br/> printf ("% LD/N", timecost); <br/> // freopen ("csr.txt ", "W", stdout); <br/> for (INT I = 0; I <row; ++ I) <br/> printf ("% lf/N ", RET [I]); <br/> // fclose (stdout); </P> <p> return 0; <br/>}