Advertisement
supremeXD

Untitled

Oct 17th, 2021
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <bitset>
  5. using namespace std;
  6.  
  7. #define all(v) v.begin(), v.end()
  8.  
  9. int real_value(int byte, int number, int n) {
  10. if(byte == 1) {
  11. return number;
  12. } else {
  13. return n + number;
  14. }
  15. }
  16.  
  17. int main() {
  18. int n; cin >> n;
  19. vector<vector<int>>x;
  20. for (int i = 0; i < (1 << n); i++) {
  21. string s; cin >> s; int val; cin >> val;
  22. if(val) {
  23. vector<int>cur;
  24. for (int j = 0; j < n; j++) {
  25. cur.push_back(s[j] - '0');
  26. }
  27. x.push_back(cur);
  28. }
  29. }
  30.  
  31. if(x.empty()) {
  32. cout << n + 2 << endl;
  33. cout << "1 1" << endl;
  34. cout << "2 1 " << n + 1 << endl;
  35. return 0;
  36. }
  37.  
  38. cout << 2 * n + (n - 1) * x.size() + x.size() - 1 << endl;
  39.  
  40. for (int i = n; i < 2 * n; i++) {
  41. cout << "1 " << i - n + 1 << endl;
  42. }
  43.  
  44. int cnt = 2 * n; /// -1
  45. vector<int>indexes;
  46. for (int i = 0; i < x.size(); i++) { // {101, 110, 111}
  47. for (int j = 1; j < x[i].size(); j++) { // {101}
  48. if(j == 1) {
  49. cout << "2 " << real_value(x[i][j - 1], j - 1, n) + 1 << " " << real_value(x[i][j], j, n) + 1 << endl;
  50. } else {
  51. cout << "2 " << cnt << " " << real_value(x[i][j], j, n) + 1 << endl;
  52. }
  53. cnt++;
  54. }
  55. indexes.push_back(cnt - 1);
  56. }
  57.  
  58. for (int i = 1; i < indexes.size(); i++) {
  59. if(i == 1) {
  60. cout << "3 " << indexes[i - 1] + 1 << " " << indexes[i] + 1 << endl;
  61. } else {
  62. cout << "3 " << cnt << " " << indexes[i] + 1 << endl;
  63. }
  64. cnt++;
  65. }
  66.  
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement