Advertisement
Guest User

Aggregates Codeforces Ratings

a guest
Mar 16th, 2015
631
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include <fstream>
  4. #include <iomanip>
  5. #include <string>
  6. #include <cstdlib>
  7. #include <cstdio>
  8. #include <cstring>
  9. #include <cmath>
  10. #include <ctime>
  11. #include <climits>
  12. #include <cassert>
  13. #include <vector>
  14. #include <queue>
  15. #include <stack>
  16. #include <deque>
  17. #include <set>
  18. #include <map>
  19. #include <bitset>
  20. #include <utility>
  21. #include <algorithm>
  22.  
  23. #define forn(i, n) for (int i = 0; i < int(n); i++)
  24.  
  25. using namespace std;
  26.  
  27. long double getWinProbability(long double ra, long double rb) {
  28.     return 1.0 / (1.0 + pow((long double) 10.0, (rb - ra) / 400.0));
  29. }
  30.  
  31. long double aggregateRatings(vector<long double> teamRatings)
  32. {
  33.     long double left = 1;
  34.     long double right = 1E4;
  35.  
  36.     for (int tt = 0; tt < 100; tt++) {
  37.         long double r = (left + right) / 2.0;
  38.  
  39.         long double rWinsProbability = 1.0;
  40.         forn(i, teamRatings.size())
  41.             rWinsProbability *= getWinProbability(r, teamRatings[i]);
  42.  
  43.         long double rating = log10(1 / (rWinsProbability) - 1) * 400 + r;
  44.  
  45.         if (rating > r)
  46.             left = r;
  47.         else
  48.             right = r;
  49.     }
  50.  
  51.     return (left + right) / 2.0;
  52. }
  53.  
  54. int main(int argc, char* argv[])
  55. {
  56.     vector<long double> a(2, 2601);
  57.  
  58.     printf("%.10lf\n", double(aggregateRatings(a)));
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement