1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <vector>
5 #include <map>
6 using namespace std;
7 const int inf = 0x3f3f3f3f;
8 const int MAX = 200+10;
9 double GPA[10],dp1[20][30000],dp2[20][30000];
10 map<int,int> hash;
11 void init() {
12 memset(GPA,0,sizeof(GPA));
13 for(int i=60;i<=69;i++) hash[i]=1;
14 for(int i=70;i<=74;i++) hash[i]=2;
15 for(int i=75;i<=79;i++) hash[i]=3;
16 for(int i=80;i<=84;i++) hash[i]=4;
17 for(int i=85;i<=100;i++) hash[i]=5;
18 GPA[1]=2.0; GPA[2]=2.5; GPA[3]=3.0;
19 GPA[4]=3.5; GPA[5]=4.0;
20 memset(dp2,0,sizeof(dp2));
21 for(int i=0;i<=10;i++) {
22 for(int j=0;j<=1000;j++) dp1[i][j]=inf;
23 }
24 for(int i=60;i<=100;i++) {
25 dp1[1][i]=GPA[hash[i]];
26 dp2[1][i]=GPA[hash[i]];
27 }
28 for(int i=2;i<=10;i++) {
29 for(int v=0;v<=1000;v++) {
30 for(int j=60;j<=100;j++) {
31 if(v>=j) {
32 if(i==1) {
33 dp1[i][v]=min(dp1[i][v],dp1[i-1][v-j]+GPA[hash[j]]);
34 dp2[i][v]=max(dp2[i][v],dp2[i-1][v-j]+GPA[hash[j]]);
35 }
36 else if(((double)(v-j)/(double)(i-1))>=60) {
37 dp1[i][v]=min(dp1[i][v],dp1[i-1][v-j]+GPA[hash[j]]);
38 dp2[i][v]=max(dp2[i][v],dp2[i-1][v-j]+GPA[hash[j]]);
39 }
40 }
41 }
42 }
43 }
44
45
46 }
47 int main() {
48 int n,cnt,ave; init();
49 scanf("%d",&n);
50 while(n--) {
51 scanf("%d %d",&ave,&cnt);
52 int tot=ave*cnt;
53 printf("%.4lf %.4lf\n",dp1[cnt][tot]/(double)cnt,dp2[cnt][tot]/(double)cnt);
54 }
55 return 0;
56 }