// Contoh Bab 17: permutasi dengan unsur yang sama. // // Compile: g++ -std=c++17 -O2 -o permutasi exercises/17/01-permutasi.cpp // Jalankan: ./permutasi // Contoh masukan: OSNOSN // Coba juga : AAB #include #include #include using namespace std; long long faktorial(int n) { long long hasil = 1; for (int i = 2; i <= n; i++) hasil *= i; return hasil; } int main() { string s; cin >> s; int n = s.size(); // Rumus: n! dibagi faktorial banyaknya tiap huruf. int cacah[256] = {0}; for (char c : s) cacah[(unsigned char)c]++; long long rumus = faktorial(n); for (int i = 0; i < 256; i++) if (cacah[i] > 1) rumus /= faktorial(cacah[i]); // Pemeriksaan: cacah susunan berbeda satu per satu. string t = s; sort(t.begin(), t.end()); long long langsung = 0; do { langsung++; } while (next_permutation(t.begin(), t.end())); cout << "rumus : " << rumus << "\n"; cout << "langsung: " << langsung << "\n"; return 0; }