two_sets_1092.cpp (924B)
1 #include <iostream> 2 #include <vector> 3 4 void printarr(const std::vector<int>& a) { 5 std::cout << a.size() << std::endl; 6 for (auto x : a) 7 std::cout << x << " "; 8 std::cout << std::endl; 9 } 10 11 int main() { 12 int n; 13 std::cin >> n; 14 15 switch (n % 4) { 16 case 1: 17 case 2: 18 std::cout << "NO\n"; 19 break; 20 case 0: 21 std::cout << "YES\n"; 22 { 23 std::vector<int> a(n/2), b(n/2); 24 for (int i = 0; i < n/4; i++) { 25 a[2*i] = 4*i+1; 26 a[2*i+1] = 4*i+4; 27 b[2*i] = 4*i+2; 28 b[2*i+1] = 4*i+3; 29 } 30 printarr(a); 31 printarr(b); 32 } 33 break; 34 case 3: 35 std::cout << "YES\n"; 36 if (n == 3) { 37 std::cout << "2\n1 2\n1\n3\n"; 38 } else { 39 std::vector<int> a(n/2+1), b(n/2); 40 a[0] = 1; a[1] = 2; a[2] = 4; a[3] = 7; 41 b[0] = 3; b[1] = 5; b[2] = 6; 42 for (int i = 1; i < n/4; i++) { 43 a[2*i+2] = 4*i+4; 44 a[2*i+3] = 4*i+7; 45 b[2*i+1] = 4*i+5; 46 b[2*i+2] = 4*i+6; 47 } 48 printarr(a); 49 printarr(b); 50 } 51 break; 52 } 53 }