//general approach Template
void Backtrack(int start)
{
//Base case
// loop for all possible values
{
//include the current element at this position if possible in the ans
//More generally, make a choice
Backtrack(start+1)
//backtrack by removing current element
}
------------------------------------------------
//Generate all subsets (non dublicated)
int n;
void GenerateSubs(vector<int> &a, int s, vector<int> &subset, vector<vector<int>> &ans) {
for (int i = s; i < n; i++) {
subset.push_back(a[i]); //include element at ith position
GenerateSubs(a, i + 1, subset, ans); //generate all subsets including ith element
subset.pop_back(); //backtrack
}
ans.push_back(subset);
}
vector<vector<int>> subsets(vector<int> &a) {
vector<vector<int>> ans;
vector<int> subset;
n = a.size();
GenerateSubs(a, 0, subset, ans);
return ans;
}
int main() {
fast;
int n;
cin >> n;
vector<int> a(n);
vector<vector<int>> ans(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
ans = subsets(a);
for (vector<int> i: ans) {
for (int j: i) {
cout << j;
}
cout << '\n';
}
}
// i/p :
//3
//1,2,3
// o/p :
------------------------------------------------
//Generate all subsets (dublicated)
int n;
void GenerateSubs(vector<int>&a,int s,vector<int>&subset,vector<vector<int>>&ans)
{
for(int i=s;i<n;i++)
{
if(i==s||a[i]!=a[i-1])
{
subset.push_back(a[i]); //include element at ith position
GenerateSubs(a,i+1,subset,ans); //generate all subsets including ith element
subset.pop_back(); //backtrack
}
}
ans.push_back(subset);
}
vector<vector<int>> subsetsWithDup(vector<int> &a) {
vector<vector<int>> ans;
vector<int> subset;
n = a.size();
sort(a.begin(), a.end()); //sort the elements so that we can keep track of duplicates
GenerateSubs(a, 0, subset, ans);
return ans;
}
int main() {
fast;
#ifndef ONLINE_JUDGE
freopen("Input.txt", "r", stdin);
freopen("Output.txt", "w", stdout);
freopen("Error.txt", "w", stderr);
#endif
int n;
cin >> n;
vector<int> a(n);
vector<vector<int>> ans(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
ans = subsetsWithDup(a);
for (vector<int> i: ans) {
for (int j: i) {
cout << j;
}
cout << '\n';
}
}
// i/p :
//4
//1 2 3 2
/* o/p :
1223
122
123
12
13
1
223
22
23
2
3
*/
------------------------------------------------
------------------------------------------------
//---------------------------------------Examples--------------------------------------------------
//Generate all subset instead '?'
string s;
string o;
void solve(int i) {
//base case
if (i == s.length()) {
for (int j = 0; j < s.length(); ++j) {
cout << o[j];
}
cout << '\n';
return;
}
if (s[i] != '?') {
o[i] = s[i];
solve(i + 1);
} else {
for (int j = 'a'; j <= 'z'; ++j) {
o[i] = j;
solve(i + 1);
}
}
}
int main() {
cin >> s;
solve(0);
}
---------------------------------------------------------------------------------------------------
//Generating Permutations Using next_permutation
int n;
int const N = 11;
bool taken[N];
int stk[N];
void prm(int i) {
//base case
if (i == n) {
for (int j = 0; j < n; ++j) {
cout << stk[j] << ' ';
}
cout << el;
return;
}
for (int j = 1; j <= n; ++j) {
if (!taken[j]) {
taken[j] = true;
stk[i] = j;
prm(i + 1);
taken[j] = false;
}
}
}
int main() {
fast;
#ifndef ONLINE_JUDGE
freopen("Input.txt", "r", stdin);
freopen("Output.txt", "w", stdout);
freopen("Error.txt", "w", stderr);
#endif
cin >> n;
prm(0);
}
---------------------------------------------------------------------------------------------------
//