Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <set>
- #include <map>
- using namespace std;
- typedef long long ent;
- //by me: Mientras no llegue, sigue pidiendo. Si lo supera o "se passa", para.
- double rec(int& k, int ac, vector<int>& v, int sum) { //prob de conseguir >k puntos
- if (ac>15) return 0.;
- if(ac>k) return 1.;
- double x =0;
- for (int i = 0; i < 8;++i) {
- if (v[i]>0) {
- --v[i];
- x+=double(v[i]+1)/double(sum)*rec(k,ac+2*i+(i==0),v,sum-1);
- ++v[i];
- }
- }
- return x;
- }
- double juga(int& k, vector<int>& v, int sum) {
- if(k>15) return 0.;
- double ans = 0;
- double Q = 1-rec(k,0,v,sum);
- for (int i = 0; i < 8; ++i) if (v[i]>0) {
- k+=2*i+(i==0);
- --v[i];
- double P = juga(k,v,sum-1);
- ++v[i];
- k-=2*i+(i==0);
- ans=max(ans, double(v[i]+1)/double(sum)*max(P,Q));
- }
- return ans;
- }
- const int M = 16;
- int main() {
- int t;
- cin >> t;
- while (t--) {
- char c;
- int p=0,s=0;
- cin >> c;
- if (c=='F') p=1;
- else p=2*(c-'0');
- vector<int> v(8,0);
- for (int i=0;i<8;++i) { //v[0] fig
- cin >> v[i];
- s+=v[i];
- }
- cout << juga(p,v,s)<< " ";
- cout << 1-rec(p,0,v,s) << endl; //prob que dona b (segona)
- }
- }
Add Comment
Please, Sign In to add comment