Advertisement
Guest User

codeforces-83-2-D

a guest
Aug 23rd, 2011
703
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <sstream>
  2. #include <queue>
  3. #include <set>
  4. #include <map>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <cstdlib>
  8. #include <cctype>
  9. #include <cmath>
  10. #include <iostream>
  11. #include <string>
  12. #include <vector>
  13. #include <algorithm>
  14.  
  15. using namespace std;
  16.  
  17. #define INF                  (1<<30)
  18. #define LINF                 ((long long)1<<60)
  19. #define PI                   2*acos(0)
  20. #define eps                  1e-7
  21. #define two(x)               (1<<x)
  22. #define twoL(x)              ((long long)1<<x)
  23.  
  24. #define FOR(i,a,b)           for(i=(a);i<(b);i++)
  25. #define FORD(i,a,b)          for(i=(a);i>(b);i--)
  26. #define REP(i,n)             for(i=0;i<(n);i++)
  27. #define REV(i,n)             for(i=(n-1);i>=0;i--)
  28. #define Sort(s)              sort(s.begin(),s.end())
  29. #define ASort(s,n)           sort(&s[0],&s[n])
  30. #define Reverse(s)           reverse(s.begin(),s.end())
  31. #define Mem(A,c)             memset(A,c,sizeof(A))
  32. #define Split(str)           {vs.clear();istringstream A(str);while(A>>(str))vs.push_back(str);}
  33. #define CLR(s)               s.clear()
  34. #define SZ(s)                s.size()
  35. #define pb                   push_back
  36. #define mp                   make_pair
  37. #define fs                   first
  38. #define sc                   second
  39.  
  40. #define isBetn(x,a,b)        (x>=a && x<=b)
  41. #define isIntSect(a,b,c,d)   ((a>=c && a<=d) || (b>=c && b<=d) || (c>=a && d<=b))
  42.  
  43. typedef long long            ll;
  44. typedef pair<int,int>        pii;
  45. typedef pair<string,int>     psi;
  46. typedef pair<string,string>  pss;
  47. typedef vector<int>          vi;
  48. typedef vector<string>       vs;
  49. typedef map<int,int>         mii;
  50. typedef map<string,int>      msi;
  51. typedef map<char,int>        mci;
  52.  
  53. //int dx[]={1,-1,0,0},dy[]={0,0,1,-1}; // 4-direction delta
  54. //int dc[]={0,1,0,-1,1,1,-1,-1},dr[]={1,0,-1,0,1,-1,-1,1}; // 8-direction delta
  55. //int dk[]={1,2,2,1,-1,-2,-2,-1},dl[]={2,1,-1,-2,-2,-1,1,2}; // Knight's move
  56.  
  57. double nCr(int n,int r)
  58. {
  59.    int i;
  60.    double p=1.0,q=1.0,ans=1.0;
  61.  
  62.    if(r>n)
  63.        return 0.0;
  64.  
  65.    for(i=0;i<r;i++)
  66.    {
  67.        p=n-i;
  68.        q=i+1;
  69.        ans*=(p/q);
  70.    }
  71.  
  72.    return ans;
  73. }
  74.  
  75. int main()
  76. {
  77.    int n,m,h,a[102];
  78.    int i,sum;
  79.  
  80.    cin >> n >> m >> h ;
  81.  
  82.    sum=0;
  83.    REP(i,m)
  84.    {
  85.        cin >> a[i];
  86.        sum+=a[i];
  87.    }
  88.  
  89.    if(sum<n)
  90.    {
  91.        printf("%lf\n",-1.0);
  92.        return 0;
  93.    }
  94.  
  95.    double x=nCr(sum-1,n-1);
  96.    double y=nCr(sum-a[h-1],n-1);
  97.  
  98.    printf("%lf\n",1.0-(y/x));
  99.  
  100.    return 0;
  101. }
Advertisement
RAW Paste Data Copied
Advertisement