1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <string>
5 #include <algorithm>
6 #include <utility>
7 #include <vector>
8 #include <map>
9 #include <queue>
10 #include <stack>
11 #include <cstdlib>
12 typedef long long ll;
13 #define lowbit(x) (x&(-x))
14 #define ls l,m,rt<<1
15 #define rs m+1,r,rt<<1|1
16 using namespace std;
17 int t,n;
18 const int N=1e5+9;
19 struct Node{
20 int h;
21 ll w;
22 int f;
23 }node[N];
24 bool cmp(Node x,Node y){
25 double xx=1.0*x.f/x.w;
26 double yy=1.0*y.f/y.w;
27 return xx<yy;
28 }
29 /*
30 最好是先攻击 :被攻击次数越少,并且伤害力又大
31 也即是按照
32 需要被攻击的次数/伤害力
33 由小到大排序
34 */
35 int main()
36 {
37 scanf("%d",&t);
38 for(int i=1;i<=t;i++)
39 { memset(node,0,sizeof(node));
40 scanf("%d",&n);
41 ll sum=0;
42 for(int i=0;i<n;i++){
43 scanf("%d%lld",&node[i].h,&node[i].w);
44 sum+=node[i].w;
45 }
46 int k,ans;
47 for(int i=0;i<n;i++)
48 { k=1;
49 ans=0;
50 while(node[i].h>0){
51 node[i].h-=k;
52 k++;
53 ans++;
54 }
55 node[i].f=ans;
56 }
57 sort(node,node+n,cmp);
58 ll ret=0;
59 for(int i=1;i<n;i++)
60
61 {
62 node[i].f=node[i-1].f+node[i].f;
63 }
64 for(int i=0;i<n;i++)
65 {
66 ret+=node[i].f*node[i].w;
67 }
68 printf("Case #%d: %lld\n",i,ret);
69 }
70 return 0;
71 }