fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <ctime>
  4. #include <cstdlib>
  5.  
  6. #define NMAX 4000
  7.  
  8. typedef unsigned char uchar;
  9. typedef unsigned int uint;
  10.  
  11. uchar matrix[NMAX][NMAX];
  12.  
  13. void
  14. minit(int n)
  15. {
  16. for(int i = 0; i < n; i++)
  17. for(int j = 0; j < n; j++)
  18. if(n < 100)
  19. matrix[i][j] = rand()%2;
  20. else if(n < 1000 && rand()%3 == 0)
  21. matrix[i][j] = 1;
  22. else if(rand()%4 == 0)
  23. matrix[i][j] = 1;
  24. else
  25. matrix[i][j] = 0;
  26. }
  27.  
  28. void
  29. mprint(int n)
  30. {
  31. char bit;
  32. std::cout << n << '\n';
  33. for(int i = 0; i < n; i++) {
  34. for(int j = 0; j < n; j++) {
  35. bit = matrix[i][j] + '0';
  36. std::cout << bit;
  37. }
  38. std::cout << '\n';
  39. }
  40. }
  41.  
  42. uint
  43. msquareones(int n)
  44. {
  45. uint item, ones;
  46. ones = 0U;
  47. for(int i = 0; i < n; i++)
  48. for(int j = 0; j < n; j++) {
  49. item = 0U;
  50. for(int k = 0; k < n; k++)
  51. item ^= matrix[i][k] & matrix[k][j];
  52. ones += item;
  53. }
  54. return ones;
  55. }
  56.  
  57. int
  58. main(int argc, char *argv[])
  59. {
  60. int n;
  61.  
  62. srand(time(NULL));
  63. if(argc == 1)
  64. std::cin >> n;
  65. else
  66. n = std::atoi(argv[1]);
  67.  
  68. if(n < 0)
  69. return 1;
  70. if(n > NMAX)
  71. n = NMAX;
  72. minit(n);
  73. mprint(n);
  74. std::cout << msquareones(n) << '\n';
  75.  
  76. return 0;
  77. }
Success #stdin #stdout 0s 18728KB
stdin
80
stdout
80
01001000000001110010001100010000110010010100011110101011010011000011011001010000
01011111010100101001010000100101000111111101100000001011001100000000011100010000
00110000001001100100001001100100110110000100111101101001101110011001001101111001
01011010000000100110001011101101001100110111101110010111000010110000001110010100
10110100100100000111100010111010011001110100111000110111111010011101011001100000
01100101011111010000111010010000110100001111000000000101100100110000001010110111
11111100110111011000010111000111001111000010111111110100000011111010010011000011
10001001001111001101000110010100000100100011111111011010111101101101111110011100
00011110001011100110001100001000101011011101011101101010000000011110010010111001
11110010010110000010110011000011000001010100100101000001001010110011110000000011
01100100010101001111011111101011000010011001100111001110000101101101100001001011
11100010011010101110001011001110001000001010001010010101000101000110111010100001
00110100100100001100010011011010001011100100100010010011011110100001011001011010
01000100111011011101011111001010110100111100001111101010010111110001000010011000
11000100111001111001001110000001010000011100011111111000000011010010010000011101
01010100101011111001101001110100110100110000111001011111101101010000010000011001
10111000110110010000100101111110101000111100100100100110001110000111100111101110
10011110011111001110111001000100101011010011111000110010110000010110001000011101
01001101011011100101111101011011111111010100010000111101011110011100100110111110
11110000110010110111110010111111000000010001110110001011000011111110101101111100
10011101001110101001000111001100111001001100011111001111011100001101100000101010
10011101111111100001000001011010001111001100011111001001110011111001001101101010
10000110010111000010011000111000001110110101101101110010000110010100111110000011
10010110010110001100010110100011010000101111101011010010100111110100111100010111
01100001000111111100011011100010101101010101011101000101111111011100011001001101
00001010010100011111000000011001001010011001011100101101100010111010001001110000
11000011111010100101111110011100000111000001010100010111110000011000100100111100
10111000011011100101001000101100110000101001101110110001011111100110000101011010
00000010101010100000011000110010010010010110000000001101100100111011000011010010
11101100100001101011010000101110000110011011101100011010100011001011110011111101
10011110010110100111011001110111110011011000000110011010101110010111000100110001
00110011110011110100100111011011101100111101010001111110010001111001111011110001
11000110110100010001010101011000101100011001000100000010001101000110111001101111
10010100110010011110100111100111111111000001000101111100010000111010111011110000
11110110000101010101011101001000111101111101100100001000100011000001110010100110
01111110100011111100000101110010000111011010100010001011110010010010011110011010
00010010110010001101010110000011010011001010110000101111001000100001110011100100
01011101101101101000101010111111111001101010110010100001010111100001111110111110
00000100000101101110001010100010110100011001101011001000011010001100101001111111
01111100010111000001010011100010100110111110010011010011100001010001011110111000
10110011011000100001110010000001010011110111101101000101101101000001000011100110
00011100101011001111100011010101100010010110010001111111110110001010111110110110
11000111101001010101110000101100001000010111010010100000010100001111110001100111
00100100100100011100000011001111011001111111111001000101001101000100010101110010
10011011001011011101001110010011011110010100101011101010011010011100110100110110
01001100000000101000100101110011111101101100000100011001110001110000111111111101
10000100000001001010001110011001111101100110010111011101000110001011110101110001
10110100001100100011111000100100011001001111101111100001011111110011111001101110
00100111110001111000110101100100111010101100011111100111011101111010100010011100
01010101010001010111011110101100101101000010010001101000011001010110010001000001
01111110000100001101101101100110011100111101101001111001010001000111110000100000
10110100000000001011111111101001000010101101011111000010110010110110000100001110
00010011111011100000101101101001010011100100010010100010000111010101011101100111
10010110001110011001010001100011010010110001000110111111101100100111100100010001
01011000011100100011011111010010010110100010100111010101100111111100010011000011
10011100101001110110000010010001010100011101010111111011000101000110111011111100
10100110101110111010001100010111101111101110101010010100001010101010111000011110
11101101101100110100010011100000110000100011000110111111001100101100100001111101
01010001000101110111111000100110011010100110001011010111001010011111111100110111
01001111101001100110001001100110000110010111011100100000100111111011010011110000
01000101101000110000001100001111010000011111110011011101010101000011110000111110
00001011110101011100000001111101101001000011110100100001100010000101001110000010
01101110101001010101110010110000110000100000111101010000011011010111101101110110
01010010101001100111100000101011010011000100100110100100101000001000010000010011
00011011001101110010110100100001000101010000110111101101111011111100011011100100
01011000100011110011101010011010001100100001100001111010110001001010000000100000
11111010011011001101101011011000111001100001100110001000101001011001111111101110
10000101101011101110000111000101110100010110110000110100000001110110011011000100
11110010000010011111000110111000110011001100101010001010010010001001011101010111
01111110010110111001110100000100111000000011110010101110010000010100101110101100
01010110000100001011100001001001110100010000101010100000100001110000001011000101
10110101100111011001111010011001010000011000100100011010011101000110111011101110
10100110001000101010101000011010010001000110100001110010011111110110110111101111
10010110101010011110101010010101110101111001000010000001010001100110010010100101
10010011111001000111011010011001000111001101000101000101100000111000100011001011
11010001101101011010001011001100001001111011111000100001100010010110000111000110
00100101001101100000101011001101111111011101011000010110110010100001000100100010
01111010110011111101101110010111000101110101011001110011010101001001110110011111
11111000101111101110111001111110001101111000110011000100110001001101010100111100
00000011011001110100001000011001001010111011100110100000000100010011010010110000
3220