fork download
  1. #include <vector>
  2. #include <bitset>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. const int N = 1024;
  8.  
  9. int GetRank(vector<bitset<N>> matrix) {
  10. const int n = matrix.size();
  11. int r = 0;
  12. vector<bool> used(n);
  13.  
  14. for (int col = 0; col < n; ++col) {
  15. int pivot = -1;
  16. for (int row = 0; row < n; ++row) {
  17. if (!used[row] && matrix[row][col]) {
  18. pivot = row; break;
  19. }
  20. }
  21.  
  22. if (pivot == -1) { continue; }
  23. used[pivot] = true;
  24. ++r;
  25.  
  26. for (int r = 0; r < n; ++r) {
  27. if (r == pivot) { continue; }
  28. if (matrix[r][col]) {
  29. matrix[r] ^= matrix[pivot];
  30. }
  31. }
  32. }
  33. return r;
  34. }
  35.  
  36. int main() {
  37. int n=450;
  38.  
  39. srand(time(NULL));
  40.  
  41. for (int i = 0; i < 100; ++i) {
  42. int m = n + i;
  43. vector<bitset<N>> matrix(m);
  44. for (int i = 0; i < m; ++i) {
  45. for (int j = 0; j < m; ++j) {
  46. matrix[i][j] = rand() % 2;
  47. }
  48. }
  49.  
  50. cout << m << " "<< GetRank(matrix) << "\n";
  51. }
  52. }
  53.  
Success #stdin #stdout 0.52s 15352KB
stdin
Standard input is empty
stdout
450 449
451 451
452 450
453 453
454 454
455 453
456 453
457 456
458 457
459 458
460 458
461 460
462 462
463 463
464 463
465 464
466 465
467 466
468 467
469 468
470 469
471 471
472 472
473 472
474 474
475 475
476 475
477 475
478 477
479 479
480 479
481 480
482 482
483 482
484 483
485 484
486 484
487 487
488 488
489 488
490 489
491 489
492 492
493 493
494 494
495 493
496 496
497 496
498 496
499 498
500 496
501 500
502 496
503 503
504 496
505 505
506 496
507 507
508 496
509 508
510 496
511 511
512 496
513 512
514 496
515 514
516 496
517 517
518 496
519 518
520 496
521 520
522 496
523 522
524 496
525 524
526 496
527 527
528 496
529 527
530 496
531 527
532 496
533 527
534 496
535 527
536 496
537 527
538 496
539 527
540 496
541 527
542 496
543 527
544 496
545 527
546 496
547 527
548 496
549 527