added working NWERC11C
[the-user-spoj:the-user-spoj.git] / GCJ101C.cpp
1 #include <cstdio>
2 #include <cstdlib>
3 #include <stdint.h>
4 #include <string>
5 #include <iostream>
6 #include <unistd.h>
7 #include <cassert>
8 #include <sys/time.h>
9 #include <stack>
10 #include <vector>
11 #include <set>
12 #include <list>
13 #include <cmath>
14 using namespace std;
15
16 typedef unsigned long long ull;
17
18 inline FILE& operator>>(FILE& f, char*& d)
19 {
20     int s = 20;
21     d = (char*)malloc(s);
22     int chr;
23     int i = 0;
24     do
25     {
26         chr = fgetc(&f);
27         if(chr == EOF)
28             goto OPERATOR_RSHIFT_FILE_CHAR_PTR_end;
29     }
30     while(chr == '\n' || chr == '\r' || chr == '\t' || chr == ' ');
31     do
32     {
33         if(i == s)
34         {
35             s *= 2;
36             d = (char*)realloc(d, s);
37         }
38         d[i] = chr;
39         chr = fgetc(&f);
40         ++i;
41     }
42     while(chr != EOF && chr != '\n' && chr != '\r' && chr != '\t' && chr != ' ');
43     OPERATOR_RSHIFT_FILE_CHAR_PTR_end:;
44     d = (char*)realloc(d, i+1);
45     d[i] = '\0';
46     return f;
47 }
48 inline FILE& operator>>(FILE& f, char& chr)
49 {
50     int x;
51     do
52     {
53         x = fgetc(&f);
54         if(x == EOF)
55         {
56             chr = '\0';
57             return f;
58         }
59     }
60     while(x == '\n' || x == '\r' || x == '\t' || x == ' ');
61     chr = x;
62     return f;
63 }
64 inline FILE& operator>>(FILE& f, int& x)
65 {
66     char *d;
67     f >> d;
68     x = atoi(d);
69     free(d);
70     return f;
71 }
72 inline FILE& operator>>(FILE& f, ull& x)
73 {
74     fscanf(&f, "%llu", &x);
75     return f;
76 }
77 inline FILE& operator>>(FILE& f, double x)
78 {
79     char *d;
80     f >> d;
81     x = atof(d);
82     free(d);
83     return f;
84 }
85 inline FILE& operator>>(FILE& f, long double& x)
86 {
87     fscanf(&f, "%LE", &x);
88     return f;
89 }
90 inline FILE& operator>>(FILE& f, string& str)
91 {
92     char *d;
93     f >> d;
94     str.~string();
95     new (&str) string(d);
96     free(d);
97     return f;
98 }
99 inline FILE& operator<<(FILE& f, const char *str)
100 {
101     fputs(str, &f);
102     return f;
103 }
104 inline FILE& operator<<(FILE& f, int x)
105 {
106     fprintf(&f, "%d", x);
107     return f;
108 }
109 inline FILE& operator<<(FILE& f, ull x)
110 {
111     fprintf(&f, "%llu", x);
112     return f;
113 }
114 inline FILE& operator<<(FILE& f, double x)
115 {
116     fprintf(&f, "%E", x);
117     return f;
118 }
119 inline FILE& operator<<(FILE& f, long double x)
120 {
121     fprintf(&f, "%LE", x);
122     return f;
123 }
124 inline FILE& operator<<(FILE& f, const string& str)
125 {
126     f << str.c_str();
127     return f;
128 }
129 inline FILE& operator<<(FILE& f, char c)
130 {
131     fputc(c, &f);
132     return f;
133 }
134 struct _endofline
135 {
136 } eol;
137 struct _flush
138 {
139 } clearbuff;
140 inline FILE& operator<<(FILE& f, const __typeof__(eol)&)
141 {
142     fputc('\n', &f);
143     fflush(&f);
144     return f;
145 }
146 inline FILE& operator<<(FILE& f, const __typeof__(clearbuff)&)
147 {
148     fflush(&f);
149     return f;
150 }
151
152 FILE& lin(*stdin);  // low-level-in
153 FILE& lout(*stdout);    // low-level-out
154 FILE& lerr(*stderr);    // low-level-err
155
156 typedef pair<int,int> PII;
157
158 template<typename T>
159 inline T pred(T t)
160 {
161     --t;
162     return t;
163 }
164 template<typename T>
165 inline T succ(T t)
166 {
167     ++t;
168     return t;
169 }
170
171 int myceil(double x)
172 {
173     if(x < 0.0000000000001)
174         return 0;
175     double f = floor(x), c = ceil(x);
176     if(x < f + 0.0000000000001)
177         return (int)f;
178     return (int)c;
179 }
180
181 int main()
182 {
183     int t;
184     lin >> t;
185     for(int _i = 0; _i != t; ++_i)
186     {
187         int l, p, c;
188         lin >> l >> p >> c;
189 //         double cnt = 0;
190 //         while(l < p)
191 //         {
192 //             l *= c;
193 //             ++cnt;
194 //         }
195 //         lerr << cnt << eol;
196         printf("Case #%d: %d\n", (_i+1), (myceil(log(log(double(p)/double(l))/log(c))/log(2))));
197     }
198 }
199