Advertisement
arif334

UVa 10776

Jan 6th, 2024
698
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. /**
  2.     * UVa-10776
  3.     * Author    : Arif Ahmad
  4.     * Date      : 24-08-14
  5.     * Algo      : Backtracking + Pruning
  6.     * Difficulty: Mideum
  7. */
  8.  
  9. #include <bits/stdc++.h>
  10. using namespace std;
  11.  
  12. #define INF_MAX     2147483647
  13. #define INF_MIN     -2147483648
  14. #define INF         (1 << 30)
  15. #define EPS         1e-9
  16. #define PI          acos(-1.0)
  17. #define N           2 + 30
  18. #define MOD         10000000007
  19. #define sz(x)       (int)(x).size()
  20. #define all(x)      (x).begin(), (x).end()
  21. #define pb          push_back
  22. #define mp          make_pair
  23. #define ms(x, a)    memset((x), (a), sizeof(x))
  24. #define F           first
  25. #define S           second
  26. #define rep(i,a,b)  for(int i=(a); i<(b); i++)
  27. #define repC(i,x)   for(size_t i=0; i<x.size(); i++)
  28. #define repIT(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)
  29.  
  30. typedef long long       LL;
  31. typedef pair<int,int>   pii;
  32. typedef vector<int>     vi;
  33. typedef vector<string>  vs;
  34. typedef vector<char>    vc;
  35. typedef vector<bool>    vb;
  36. typedef map<string,int> msi;
  37. typedef map<int,int>    mii;
  38. typedef map<char,int>   mci;
  39. typedef map<int,string> mis;
  40.  
  41. template<class T> T Abs(T x) {return x>0 ? x : -x;}
  42. template<class T> T Max(T a, T b) {return a>b ? a : b;}
  43. template<class T> T Min(T a, T b) {return a<b ? a : b;}
  44. template<class T> T gcd(T a, T b) {return (b ? gcd(b,a%b) : a);}
  45. bool isVowel(char ch){ch=tolower(ch);return(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u');}
  46.  
  47. int r, n;
  48. string s;
  49. char res[N];
  50.  
  51. void backtrack(int i, int j)
  52. {
  53.     if(i == r) {
  54.         res[r] = '\0';
  55.         puts(res);
  56.         return;
  57.     }
  58.  
  59.     for(; j<n; j++) {
  60.         res[i] = s[j];
  61.         backtrack(i+1, j+1);
  62.         while(s[j] == s[j+1]) j++; // pruning
  63.     }
  64. }
  65.  
  66.  
  67. int main()
  68. {
  69.     #ifndef ONLINE_JUDGE
  70.         freopen("in.txt", "r", stdin);
  71.     #endif
  72.  
  73.     while(cin >> s >> r) {
  74.         n = s.size();
  75.         sort(s.begin(), s.end());
  76.        
  77.         // backtrack(i, j) -> i: no. of items taken. j: next position to take
  78.         backtrack(0, 0);
  79.     }
  80.  
  81.     return 0;
  82. }
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement