#include <iostream> #include <vector> using namespace std; int power(int base, int exp) { if (exp == 0) return 1; if (exp == 1) return base; return base*power(base, exp-1); } int countOnes(string bitset) { int count = 0; for(char a: bitset) { if (a == '1') count++; } return count; } int main() { int licz; cin >> licz; int atak[licz] = {0}; int counter[licz] = {0}; vector<int> currTest; for (int i = 0; i < licz; i++) { cin >> atak[i]; } int currMin[licz]; for (int i = 0; i < licz; i ++) { currMin[i] = 40000000; } for (int i = 1; i < power(2, licz); i++) { int copy = i; string res = ""; while (copy != 0) { res += to_string(copy%2); copy /= 2; } while (res.length() < licz) res += "0"; for (int j = 0; j < licz; j++) { if (res[j] == '1') { currTest.push_back(atak[j]); } } int smaller = 0; for (int j = 0; j < currTest.size(); j++) { for (int k = j+1; k < currTest.size(); k++) { if (currTest[j] > currTest[k]) smaller += 1; } } if (smaller < currMin[countOnes(res)-1]) { currMin[countOnes(res)-1] = smaller; counter[countOnes(res)-1] = 1; } else if (smaller == currMin[countOnes(res)-1]) counter[countOnes(res)-1]++; for (int u = 0; u < licz; u++) { //cout << counter[u] << " "; } //cout << " | "; for (int u = 0; u < licz; u++) { //cout << currMin[u] << " "; } //cout << countOnes(res) << ":" << res << "-->" << smaller << endl; currTest.clear(); } for (int i = 0; i < licz; i++) { cout << currMin[i] << " " << counter[i] << endl; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <iostream> #include <vector> using namespace std; int power(int base, int exp) { if (exp == 0) return 1; if (exp == 1) return base; return base*power(base, exp-1); } int countOnes(string bitset) { int count = 0; for(char a: bitset) { if (a == '1') count++; } return count; } int main() { int licz; cin >> licz; int atak[licz] = {0}; int counter[licz] = {0}; vector<int> currTest; for (int i = 0; i < licz; i++) { cin >> atak[i]; } int currMin[licz]; for (int i = 0; i < licz; i ++) { currMin[i] = 40000000; } for (int i = 1; i < power(2, licz); i++) { int copy = i; string res = ""; while (copy != 0) { res += to_string(copy%2); copy /= 2; } while (res.length() < licz) res += "0"; for (int j = 0; j < licz; j++) { if (res[j] == '1') { currTest.push_back(atak[j]); } } int smaller = 0; for (int j = 0; j < currTest.size(); j++) { for (int k = j+1; k < currTest.size(); k++) { if (currTest[j] > currTest[k]) smaller += 1; } } if (smaller < currMin[countOnes(res)-1]) { currMin[countOnes(res)-1] = smaller; counter[countOnes(res)-1] = 1; } else if (smaller == currMin[countOnes(res)-1]) counter[countOnes(res)-1]++; for (int u = 0; u < licz; u++) { //cout << counter[u] << " "; } //cout << " | "; for (int u = 0; u < licz; u++) { //cout << currMin[u] << " "; } //cout << countOnes(res) << ":" << res << "-->" << smaller << endl; currTest.clear(); } for (int i = 0; i < licz; i++) { cout << currMin[i] << " " << counter[i] << endl; } return 0; } |