Alex_tz307

School - Level 5

Oct 30th, 2020 (edited)
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ABS(x) ((x) >= 0 ? (x) : -(x))
  3. #define int long long
  4.  
  5. using namespace std;
  6.  
  7. ifstream fin("text.in");
  8. ofstream fout("text.out");
  9.  
  10. bool fcmp(const pair < int , int >& a, const pair < int , int >& b) {
  11.     return a.second > b.second || (a.second == b.second && a.first < b.first);
  12. }
  13.  
  14. long double my_pow(long double a, long double b) {
  15.     if(b < 0)
  16.         return 1.0 / pow(a, ABS(b));
  17.     return pow(a, b);
  18. }
  19.  
  20. int32_t main() {
  21.     fin.sync_with_stdio(false);
  22.     fout.sync_with_stdio(false);
  23.     fin.tie(nullptr);
  24.     fout.tie(nullptr);
  25.     int N, P, tp;
  26.     fin >> N >> P >> tp;
  27.     vector < int > freq(P, 1000);
  28.     for(int itr = 0; itr < N; ++itr) {
  29.         vector < pair < int , int > > team[2];
  30.         vector < int > sum(2);
  31.         for(int i = 0; i < 2; ++i)
  32.             for(int j = 0; j < tp; ++j) {
  33.                 int id, score;
  34.                 fin >> id >> score;
  35.                 team[i].emplace_back(id, score);
  36.                 sum[i] += score;
  37.             }
  38.         vector < long double > S(2);
  39.         S[0] = 1;
  40.         S[1] = 0;
  41.         if(sum[1] > sum[0])
  42.             swap(S[0], S[1]);
  43.         vector < long double > add(P);
  44.         for(int i = 0; i < 2; ++i)
  45.             for(int j = 0; j < tp; ++j) {
  46.                 int ID = team[i][j].first;
  47.                 long double dif = 0;
  48.                 int inamic = i ^ 1;
  49.                 for(auto x : team[inamic])
  50.                     dif += freq[x.first];
  51.                 for(auto x : team[i])
  52.                     dif -= freq[x.first];
  53.                 long double E = (long double)1.0 / ((long double)1.0 + my_pow(10.0, dif / 400.0));
  54.                 add[ID] += (long double)32.0 * (S[i] - E);
  55.             }
  56.         for(int i = 0; i < P; ++i)
  57.             freq[i] += add[i];
  58.     }
  59.     vector < pair < int , int > > sol;
  60.     for(int i = 0; i < P; ++i)
  61.         sol.emplace_back(i, freq[i]);
  62.     sort(sol.begin(), sol.end(), fcmp);
  63.     for(auto x : sol)
  64.         fout << x.first << ' ' << x.second << '\n';
  65. }
  66.  
Add Comment
Please, Sign In to add comment