fork(1) download
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. #define NMAX 4000
  5. #define NUMS 63
  6.  
  7. typedef unsigned long long unum;
  8.  
  9. const int nbits = sizeof(unum)*8;
  10.  
  11. unum
  12. scalar_product_mod2(unum *row, unum *col, int n)
  13. {
  14. unum res, bit, sum;
  15. sum = 0U;
  16. for(int i = 0; i < n; i++)
  17. sum ^= row[i] & col[i];
  18. res = 0U;
  19. for(; sum != 0; sum >>= 1)
  20. res ^= sum & 1;
  21. return res;
  22. }
  23.  
  24. int
  25. main(int argc, char *argv[])
  26. {
  27. int nums, n;
  28. unum bit, count;
  29. unum rows[NMAX][NUMS];
  30. unum cols[NMAX][NUMS];
  31. char buf[NMAX+2];
  32.  
  33. std::memset(rows, 0, NMAX*NUMS*sizeof(unum));
  34. std::memset(cols, 0, NMAX*NUMS*sizeof(unum));
  35. std::memset(buf, 0, NMAX+2);
  36. std::cin.sync_with_stdio(false);
  37. std::cin >> n;
  38. std::cin.getline(buf, 0);
  39.  
  40. for(int i = 0; i < n; i++) {
  41. std::cin.getline(buf, n+1);
  42. for(int j = 0; j < n; j++) {
  43. bit = buf[j] - '0';
  44. rows[i][j/nbits] |= bit << j%nbits;
  45. cols[j][i/nbits] |= bit << i%nbits;
  46. }
  47. }
  48.  
  49. count = 0;
  50. nums = n/nbits + 1;
  51. if(nums > NUMS)
  52. nums = NUMS;
  53. for(int i = 0; i < n; i++)
  54. for(int j = 0; j < n; j++)
  55. count += scalar_product_mod2(rows[i], cols[j], nums);
  56.  
  57. std::cout << count << std::endl;
  58.  
  59. return 0;
  60. }
Success #stdin #stdout 0s 7092KB
stdin
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
stdout
3220