YEZAELP

TOI10: ถอดรหัสหีบสมบัติ (Treasure Chest)

Dec 31st, 2020 (edited)
119
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. using lli = long long;
  6. using pi = pair <int, int>;
  7. using pii = pair <int, pi>;
  8.  
  9. int keep[15];
  10.  
  11. void cal(int x, int opr){
  12.     if(x == 1) return;
  13.     if(x == 4) keep[2] += (2 * opr);
  14.     else if(x == 6) {
  15.         keep[2] += opr;
  16.         keep[3] += opr;
  17.     }
  18.     else if(x == 8) keep[2] += (3 * opr);
  19.     else if(x == 9) keep[3] += (2 * opr);
  20.     else if(x == 10) {
  21.         keep[2] += opr;
  22.         keep[5] += opr;
  23.     }
  24.     else keep[x] += opr;
  25. }
  26.  
  27. int main(){
  28.  
  29.     int m, n;
  30.     scanf("%d%d", &m, &n);
  31.  
  32.     vector <pii> event;
  33.  
  34.     int End = 0;
  35.     for(int i=1;i<=m;i++){
  36.         int x, s, t;
  37.         scanf("%d%d%d", &x, &s, &t);
  38.         event.push_back({s+1, {1, x}});
  39.         event.push_back({t+2, {-1, x}});
  40.         End = max(End, t+2);
  41.     }
  42.  
  43.     sort(event.begin(), event.end());
  44.  
  45.     int prev = 0;
  46.     lli mx = 0, cnt = 0;
  47.     for(auto e: event){
  48.         int x, idx, opr;
  49.         idx = e.first;
  50.         opr = e.second.first;
  51.         x = e.second.second;
  52.         if(idx != prev){
  53.             lli sum = 1;
  54.             for(int i=1;i<=7;i++) sum *= (lli)(keep[i] + 1);
  55.             if(sum > mx){
  56.                 mx = sum;
  57.                 cnt = (lli) (idx - prev);
  58.             }
  59.             else if(sum == mx){
  60.                 cnt += (lli) (idx - prev);
  61.             }
  62.         }
  63.         prev = idx;
  64.         cal(x, opr);
  65.     }
  66.  
  67.     lli sum = 1;
  68.     for(int i=1;i<=7;i++){
  69.         sum *= (lli)(keep[i] + 1);
  70.     }
  71.     if(sum > mx){
  72.         mx = sum;
  73.         cnt = (lli)(End - prev);
  74.     }
  75.     else if(sum == mx){
  76.         cnt += (lli)(End - prev);
  77.     }
  78.  
  79.     printf("%lld %lld", mx, cnt);
  80.  
  81.     return 0;
  82. }
  83.  
RAW Paste Data Copied