Infernale

Google Code Jam 2020 Q1.2 [Nesting Depth]

Apr 4th, 2020
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define INF INT_MAX
  5. #define LINF LLONG_MAX
  6. #define forin(data) for(auto &i : data)
  7. #define debug(x) cerr << #x << " = " << x << endl;
  8.  
  9. using ll = long long;
  10. using pi = pair<int, int>;
  11. using vi = vector<int>;
  12. using vii = vector<vi>;
  13. using vl = vector<ll>;
  14.  
  15. void init(){
  16.     #ifdef LOCAL
  17.         freopen("input.txt", "r", stdin);
  18.         freopen("output.txt", "w", stdout);
  19.         freopen("log.txt", "w", stderr);
  20.     #else
  21.         cin.tie(0); cout.tie(0);
  22.         ios_base::sync_with_stdio(0);
  23.     #endif
  24. }
  25.  
  26. int toInt(char i){
  27.     return (i - '0');
  28. }
  29.  
  30. void append(string &str, int n, char c){
  31.     for(int i = 0; i < n; i++){
  32.         str += c;
  33.     }
  34.     cout << str << endl;
  35. }
  36.  
  37. int main(){
  38.     init()
  39.     int tc;
  40.     cin >> tc;
  41.     for(int i = 1; i <= tc; i++){
  42.         string str;
  43.         cin >> str;
  44.         string ans = "";
  45.         if(str.size() == 1){
  46.             append(ans, toInt(str[0]), '(');
  47.             ans += str[0];
  48.             append(ans, toInt(str[0]), ')');
  49.         }else{
  50.             int left, right, brac;
  51.             left = right = brac = 0;
  52.             for(int j = 0; j < str.size(); j++){
  53.                 if(j == 0){
  54.                     left = toInt(str[j]);
  55.                     right = toInt(str[j]) - toInt(str[j + 1]);
  56.                 }else if(j == str.size() - 1){
  57.                     left = toInt(str[j]) - toInt(str[j - 1]);
  58.                     if(left > 0){
  59.                         append(ans, left, '(');
  60.                         brac += left;
  61.                     }
  62.                     right = brac;
  63.                     ans += str[j];
  64.                     append(ans, right, ')');
  65.                     break;
  66.                 }else{
  67.                     left = toInt(str[j]) - toInt(str[j - 1]);
  68.                     right = toInt(str[j]) - toInt(str[j + 1]);
  69.                 }
  70.                 if(left > 0){
  71.                     append(ans, left, '(');
  72.                     brac += left;
  73.                 }
  74.                 ans += str[j];
  75.                 if(right >= 0){
  76.                     append(ans, right, ')');
  77.                     brac -= right;
  78.                 }
  79.             }
  80.         }
  81.         cout << "Case #" << i << ": " << ans << endl;
  82.     }
  83.     return 0;
  84. }
Add Comment
Please, Sign In to add comment