Advertisement
Guest User

Untitled

a guest
Apr 8th, 2018
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <queue>
  6. #include <unordered_map>
  7. #include <unordered_set>
  8. #include <map>
  9. #include <set>
  10.  
  11. using namespace std;
  12.  
  13. typedef long long ll; typedef unsigned long long ull; typedef vector<ll> vi; typedef pair<ll,ll> pi;
  14. const int _1e5 = 100000; const int _1e7 = 10000000; const int _1e9 = 1000000000;
  15.  
  16. template<typename A, typename B> ostream& operator<<(ostream& str, const pair<A,B>& p) { return str << "(" << p.first << ", " << p.second << ")"; }
  17. template<typename T> ostream& operator<<(ostream& str, const vector<T>& v) { str << "["; for(const auto& n : v) str << n << ", "; str << "]"; return str; }
  18. template<typename T> ostream& operator<<(ostream& str, const set<T>& v) { str << "{"; for(const auto& n : v) { str << n << ", "; } str << "}"; return str; }
  19. template<typename K, typename V> ostream& operator<<(ostream& str, const unordered_map<K, V>& v) { str << "{"; for(const auto& p : v) { str << p.first << " => " << p.second << ", "; } str << "}"; return str; }
  20.  
  21. #define debug(x) cout << #x << ": " << x << endl
  22.  
  23.  
  24. int main() {
  25. ios_base::sync_with_stdio(false);
  26.  
  27. int cases; cin >> cases;
  28.  
  29. for (int case_=1; case_<=cases; ++case_) {
  30. long long d; cin >> d;
  31. string p; cin >> p;
  32.  
  33. std::priority_queue<int, vector<int>, std::greater<int>> q;
  34. long long damage = 1;
  35. long long total = 0;
  36.  
  37. for (char c : p) {
  38. if (c == 'S') {
  39. total += damage;
  40. if (damage > 1) {
  41. q.push(damage);
  42. }
  43. } else {
  44. damage *= 2;
  45. }
  46. }
  47.  
  48. int hacks = 0;
  49. while (total > d && !q.empty()) {
  50. int top = q.top();
  51. q.pop();
  52.  
  53. top /= 2;
  54. hacks += 1;
  55. total -= top;
  56.  
  57. if (top > 1) {
  58. q.push(top);
  59. }
  60. }
  61.  
  62. cout << "Case #" << case_ << ": ";
  63. if (total <= d) {
  64. cout << hacks << '\n';
  65. } else {
  66. cout << "IMPOSSIBLE\n";
  67. }
  68. }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement