bingxuan9112

Untitled

Jun 8th, 2019
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.18 KB | None | 0 0
  1. //   __________________
  2. //  | ________________ |
  3. //  ||          ____  ||
  4. //  ||   /\    |      ||
  5. //  ||  /__\   |      ||
  6. //  || /    \  |____  ||
  7. //  ||________________||
  8. //  |__________________|
  9. //  \\#################\\
  10. //   \\#################\\
  11. //    \        ____       \
  12. //     \_______\___\_______\
  13. // An AC a day keeps the doctor away.
  14.  
  15. #pragma gcc optimize("Ofast")
  16. #pragma loop_opt(on)
  17. #include <bits/stdc++.h>
  18. #define debug(x) 1&&(cout<<#x<<':'<<(x)<<'\n')
  19. #define pb emplace_back
  20. #define ff first
  21. #define ss second
  22. #define siz(v) (ll(v.size()))
  23. #define all(v) begin(v),end(v)
  24. #define REP(i,l,r) for(int i=(l);i<(r);i++)
  25. #define mid (l+(r-l>>1))
  26.  
  27. using namespace std;
  28. typedef long long ll;
  29. typedef long double ld;
  30. typedef pair<ll,ll> pll;
  31. constexpr long double PI = acos(-1),eps = 1e-8;
  32. constexpr ll N = 1000000, INF = 1e18, MOD = 998244353;
  33.  
  34. struct soldier{
  35.     int pos, killed, dps, dmg;
  36.     int cd, maxCd, buff, maxBuff;
  37.     double buffEff;
  38.     int output;
  39.     string name;
  40. } S[5];
  41. int bossHp, maxHp, bossReload;
  42. signed main(){
  43.     S[0].dps = S[1].dps = S[2].dps = 150*10;
  44.     S[0].cd = 6, S[0].maxCd = 16, S[0].maxBuff = 8, S[0].buffEff = 1200;
  45.     S[1].cd = 6, S[1].maxCd = 8,  S[1].maxBuff = 5, S[1].buffEff = 1440;
  46.     S[2].cd = 6, S[2].maxCd = 16, S[2].maxBuff = 4, S[2].buffEff = 3000;
  47.     S[3].dps = S[4].dps = 100*20;
  48.     S[3].cd = 4, S[3].maxCd = 8,  S[3].maxBuff = 5, S[3].buffEff = 3000;
  49.     S[4].cd = 3, S[4].maxCd = 16, S[4].maxBuff = 5, S[4].buffEff = 3000,  S[4].dmg = 100*7;
  50.     S[0].name = "RFB", S[1].name = "AK12", S[2].name = "G11", S[3].name = "SR-3MP", S[4].name = "Vector";
  51.     for(int i = 0; i < 5; i++) cin >> S[i].pos;
  52.     sort(S,S+5,[](soldier &a,soldier &b){return a.pos<b.pos;});
  53.     cin >> maxHp >> bossReload, bossHp = maxHp;
  54.     for(int t = 1; t <= 1000; t++) {
  55.         bool alive = false;
  56.         int totDps = 0;
  57.         for(int i = 0; i < 5; i++) {
  58.             auto &s = S[i];
  59.             if(s.killed) continue;
  60.             alive = true;
  61.             if(--s.cd == 0) s.buff = s.maxBuff+1, s.cd = s.maxCd, totDps += s.dmg, s.output += s.dmg;
  62.             if(s.buff > 0) s.buff--, totDps += s.dps+s.buffEff, s.output += s.dps+s.buffEff;//, cout<<"use skill... ";
  63.             else totDps += s.dps, s.output += s.dps;
  64.             //cout << s.name << ' ' << s.output << '\n';
  65.         }
  66.         //system("PAUSE");
  67.         if(!alive) {
  68.             cout << "Failure\n";
  69.             cout << fixed << setprecision(1) << double(bossHp)*100/maxHp << '\n';
  70.             return 0;
  71.         }
  72.         bossHp -= totDps;
  73.         if(bossHp <= 0) {
  74.             cout << "Victory\n";
  75.             cout << t;
  76.             int mx = -1e9;
  77.             vector<int> ans;
  78.             for(int i = 0; i < 5; i++)
  79.                 if(S[i].output > mx) mx = S[i].output, ans.clear(), ans.push_back(i);
  80.                 else if(S[i].output == mx) ans.push_back(i);
  81.             for(auto i:ans) cout << ' ' << S[i].name;
  82.             cout << '\n';
  83.             return 0;
  84.         }
  85.         if(t%bossReload == 0) {
  86.             for(int i = 0; i < 5; i++) if(!S[i].killed) {
  87.                 S[i].killed = true;
  88.                 break;
  89.             }
  90.         }
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment