#include <bits/stdc++.h>
using namespace std;
// returns number of occurences of character c in string s
int count_char(string &s, char c) {
return count(s.begin(), s.end(), c);
}
int main() {
string s = "00000000001111111111"; // red and white roses
sort(s.begin(), s.end());
int total_permutations = 0;
int count_in_church = 0;
// check next lexicographic permutation of s
do {
total_permutations += 1;
// check if bride steps into church by checking if
// the number of ones exceeds the number of zeros
int cnt_0 = 0;
int cnt_1 = 0;
for (char c : s) {
if (c == '0') {cnt_0 += 1;}
else {cnt_1 += 1;}
if (cnt_1 > cnt_0) {
count_in_church += 1;
break;
}
}
} while(std::next_permutation(s.begin(), s.end()));
cout << "number of times bride entered church: " << count_in_church << '\n';
cout << "total permutations: " << total_permutations << '\n';
cout << "probability: " << 1.0 * count_in_church / total_permutations << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKLy8gcmV0dXJucyBudW1iZXIgb2Ygb2NjdXJlbmNlcyBvZiBjaGFyYWN0ZXIgYyBpbiBzdHJpbmcgcwppbnQgY291bnRfY2hhcihzdHJpbmcgJnMsIGNoYXIgYykgewogICAgcmV0dXJuIGNvdW50KHMuYmVnaW4oKSwgcy5lbmQoKSwgYyk7Cn0KCgppbnQgbWFpbigpIHsKICAgIHN0cmluZyBzID0gIjAwMDAwMDAwMDAxMTExMTExMTExIjsgICAgICAgICAgICAvLyByZWQgYW5kIHdoaXRlIHJvc2VzIAogICAgc29ydChzLmJlZ2luKCksIHMuZW5kKCkpOwogIAogICAgaW50IHRvdGFsX3Blcm11dGF0aW9ucyA9IDA7CiAgICBpbnQgY291bnRfaW5fY2h1cmNoID0gMDsKICAKICAKICAgIC8vIGNoZWNrIG5leHQgbGV4aWNvZ3JhcGhpYyBwZXJtdXRhdGlvbiBvZiBzIAogICAgZG8gewogICAgICAgIHRvdGFsX3Blcm11dGF0aW9ucyArPSAxOwogIAogICAgICAgIC8vIGNoZWNrIGlmIGJyaWRlIHN0ZXBzIGludG8gY2h1cmNoIGJ5IGNoZWNraW5nIGlmCiAgICAgICAgLy8gdGhlIG51bWJlciBvZiBvbmVzIGV4Y2VlZHMgdGhlIG51bWJlciBvZiB6ZXJvcwogICAgICAgIGludCBjbnRfMCA9IDA7CiAgICAgICAgaW50IGNudF8xID0gMDsKICAgICAgICAKICAgICAgICBmb3IgKGNoYXIgYyA6IHMpIHsKICAgICAgICAJaWYgKGMgPT0gJzAnKSB7Y250XzAgKz0gMTt9CiAgICAgICAgCWVsc2Uge2NudF8xICs9IDE7fQogICAgICAgIAkKICAgICAgICAJaWYgKGNudF8xID4gY250XzApIHsKICAgICAgICAJCWNvdW50X2luX2NodXJjaCArPSAxOwogICAgICAgIAkJYnJlYWs7CiAgICAgICAgCX0KICAgICAgICB9CiAgICAgICAgCiAgICB9IHdoaWxlKHN0ZDo6bmV4dF9wZXJtdXRhdGlvbihzLmJlZ2luKCksIHMuZW5kKCkpKTsKICAKICAKICAgIGNvdXQgPDwgIm51bWJlciBvZiB0aW1lcyBicmlkZSBlbnRlcmVkIGNodXJjaDogIiA8PCBjb3VudF9pbl9jaHVyY2ggPDwgJ1xuJzsKICAgIGNvdXQgPDwgInRvdGFsIHBlcm11dGF0aW9uczogIiA8PCB0b3RhbF9wZXJtdXRhdGlvbnMgPDwgJ1xuJzsKICAgIGNvdXQgPDwgInByb2JhYmlsaXR5OiAiIDw8IDEuMCAqIGNvdW50X2luX2NodXJjaCAvIHRvdGFsX3Blcm11dGF0aW9ucyA8PCAnXG4nOwp9