fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int val(int x, int y) {
  5. if(x == 0 && y == 0) return 0;
  6.  
  7. int x_block = 1, y_block = 1;
  8. while(x_block * 2 <= x) x_block <<= 1;
  9. while(y_block * 2 <= y) y_block <<= 1;
  10. if(x > 0 && y > 0 && x_block == y_block) {
  11. return val(x - x_block, y - y_block);
  12. }else if(x > y) {
  13. return val(x - x_block, y) + x_block;
  14. }
  15. return val(x, y - y_block) + y_block;
  16. }
  17. int main() {
  18. // your code goes here
  19. int n;
  20. cin >> n;
  21. for(int i = 0; i < n; i++) {
  22. for(int j = 0; j < n; j++) {
  23. cout << val(i, j) << ' ';
  24. }
  25. cout << '\n';
  26. }
  27. return 0;
  28. }
Success #stdin #stdout 0.01s 5320KB
stdin
20
stdout
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 
1 0 3 2 5 4 7 6 9 8 11 10 13 12 15 14 17 16 19 18 
2 3 0 1 6 7 4 5 10 11 8 9 14 15 12 13 18 19 16 17 
3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12 19 18 17 16 
4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 20 21 22 23 
5 4 7 6 1 0 3 2 13 12 15 14 9 8 11 10 21 20 23 22 
6 7 4 5 2 3 0 1 14 15 12 13 10 11 8 9 22 23 20 21 
7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 23 22 21 20 
8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 24 25 26 27 
9 8 11 10 13 12 15 14 1 0 3 2 5 4 7 6 25 24 27 26 
10 11 8 9 14 15 12 13 2 3 0 1 6 7 4 5 26 27 24 25 
11 10 9 8 15 14 13 12 3 2 1 0 7 6 5 4 27 26 25 24 
12 13 14 15 8 9 10 11 4 5 6 7 0 1 2 3 28 29 30 31 
13 12 15 14 9 8 11 10 5 4 7 6 1 0 3 2 29 28 31 30 
14 15 12 13 10 11 8 9 6 7 4 5 2 3 0 1 30 31 28 29 
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 31 30 29 28 
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 1 2 3 
17 16 19 18 21 20 23 22 25 24 27 26 29 28 31 30 1 0 3 2 
18 19 16 17 22 23 20 21 26 27 24 25 30 31 28 29 2 3 0 1 
19 18 17 16 23 22 21 20 27 26 25 24 31 30 29 28 3 2 1 0