#include <iostream>
#include <vector>
static const int digits = 305;
std::vector<char> divide(int nomin, int denom) {
std::vector<char> num(digits,0);
for (int i = 0; i < digits && nomin; i++) {
if (nomin < denom) {
num[i] = 0;
} else {
num[i] = nomin/denom;
nomin %= denom;
}
nomin *= 10;
}
return num;
}
std::vector<char> summ(std::vector<char> a, std::vector<char> b) {
std::vector<char> res(digits, 0);
for (int i = digits-1; i >= 0; i--) {
res[i] += a[i] + b[i];
if (res[i] > 9) {
res[i] -= 10;
if (i > 0) res[i-1]++;
}
}
return res;
}
std::vector<char> neg(std::vector<char> a, std::vector<char> b) {
std::vector<char> res(digits, 0);
for (int i = digits-1; i >= 0; i--) {
res[i] += a[i] - b[i];
if (res[i] < 0) {
res[i] += 10;
if (i > 0) res[i-1]--;
}
}
return res;
}
void print_num(std::vector<char> num) {
std::cout << int(num[0]) << '.';
for (int i = 1; i < digits; i++)
std::cout << int(num[i]);
std::cout << std::endl;
}
std::vector<char> divideBy2_times(std::vector<char> nomin, int times) {
std::vector<char> res = nomin;
for (int t = 0; t < times; t++) {
for (int i{}; i < digits; i++) {
if(i < digits - 1 && res[i] % 2) res[i+1] += 10;
res[i] /= 2;
}
}
return res;
}
int main() {
std::vector<char> pi(digits, 0);
for(int i = 0; i < 275; i++) {
std::vector<char> mem = divide(4, 8*i + 1);
mem = neg(mem, divide(2, 8*i + 4));
mem = neg(mem, divide(1, 8*i + 5));
mem = neg(mem, divide(1, 8*i + 6));
mem = divideBy2_times(mem, i * 4);
pi = summ(pi, mem);
}
print_num(pi);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMDU7CgpzdGQ6OnZlY3RvcjxjaGFyPiBkaXZpZGUoaW50IG5vbWluLCBpbnQgZGVub20pIHsKCXN0ZDo6dmVjdG9yPGNoYXI+IG51bShkaWdpdHMsMCk7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBkaWdpdHMgJiYgbm9taW47IGkrKykgewoJCWlmIChub21pbiA8IGRlbm9tKSB7CgkJCW51bVtpXSA9IDA7CgkJfSBlbHNlIHsKCQkJbnVtW2ldID0gbm9taW4vZGVub207CgkJCW5vbWluICU9IGRlbm9tOwoJCX0KCQkKCQlub21pbiAqPSAxMDsKCX0KCQoJcmV0dXJuIG51bTsKfQoKc3RkOjp2ZWN0b3I8Y2hhcj4gc3VtbShzdGQ6OnZlY3RvcjxjaGFyPiBhLCBzdGQ6OnZlY3RvcjxjaGFyPiBiKSB7CglzdGQ6OnZlY3RvcjxjaGFyPiByZXMoZGlnaXRzLCAwKTsKCWZvciAoaW50IGkgPSBkaWdpdHMtMTsgaSA+PSAwOyBpLS0pIHsKCQlyZXNbaV0gKz0gYVtpXSArIGJbaV07CgkJaWYgKHJlc1tpXSA+IDkpIHsKCQkJcmVzW2ldIC09IDEwOwoJCQlpZiAoaSA+IDApIHJlc1tpLTFdKys7CgkJfQoJfQoJCglyZXR1cm4gcmVzOwp9CgpzdGQ6OnZlY3RvcjxjaGFyPiBuZWcoc3RkOjp2ZWN0b3I8Y2hhcj4gYSwgc3RkOjp2ZWN0b3I8Y2hhcj4gYikgewoJc3RkOjp2ZWN0b3I8Y2hhcj4gcmVzKGRpZ2l0cywgMCk7Cglmb3IgKGludCBpID0gZGlnaXRzLTE7IGkgPj0gMDsgaS0tKSB7CgkJcmVzW2ldICs9IGFbaV0gLSBiW2ldOwoJCWlmIChyZXNbaV0gPCAwKSB7CgkJCXJlc1tpXSArPSAxMDsKCQkJaWYgKGkgPiAwKSByZXNbaS0xXS0tOwoJCX0KCX0KCQoJcmV0dXJuIHJlczsKfQoKCnZvaWQgcHJpbnRfbnVtKHN0ZDo6dmVjdG9yPGNoYXI+IG51bSkgewoJc3RkOjpjb3V0IDw8IGludChudW1bMF0pIDw8ICcuJzsKCQoJZm9yIChpbnQgaSA9IDE7IGkgPCBkaWdpdHM7IGkrKykKCQlzdGQ6OmNvdXQgPDwgaW50KG51bVtpXSk7CgkJCglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwp9CgpzdGQ6OnZlY3RvcjxjaGFyPiBkaXZpZGVCeTJfdGltZXMoc3RkOjp2ZWN0b3I8Y2hhcj4gbm9taW4sIGludCB0aW1lcykgewoJc3RkOjp2ZWN0b3I8Y2hhcj4gcmVzID0gbm9taW47Cglmb3IgKGludCB0ID0gMDsgdCA8IHRpbWVzOyB0KyspIHsKCQlmb3IgKGludCBpe307IGkgPCBkaWdpdHM7IGkrKykgewoJCQlpZihpIDwgZGlnaXRzIC0gMSAmJiByZXNbaV0gJSAyKSByZXNbaSsxXSArPSAxMDsKCQkJcmVzW2ldIC89IDI7CgkJfQoJfQoJCglyZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpIHsKCXN0ZDo6dmVjdG9yPGNoYXI+IHBpKGRpZ2l0cywgMCk7Cglmb3IoaW50IGkgPSAwOyBpIDwgMjc1OyBpKyspCXsKCQlzdGQ6OnZlY3RvcjxjaGFyPiBtZW0gPSBkaXZpZGUoNCwgOCppICsgMSk7CgkJbWVtID0gbmVnKG1lbSwgZGl2aWRlKDIsIDgqaSArIDQpKTsKCQltZW0gPSBuZWcobWVtLCBkaXZpZGUoMSwgOCppICsgNSkpOwoJCW1lbSA9IG5lZyhtZW0sIGRpdmlkZSgxLCA4KmkgKyA2KSk7CgkJbWVtID0gZGl2aWRlQnkyX3RpbWVzKG1lbSwgaSAqIDQpOwoJCXBpID0gc3VtbShwaSwgbWVtKTsKCX0KCQoJcHJpbnRfbnVtKHBpKTsKCXJldHVybiAwOwp9