#include <iostream>
using namespace std;
class MovingMagic {
public:
void updateValue(double x) {
if (!init_) {
init_ = true;
cv_ = x;
} else {
cv_ = cv_ * 0.999 + x * 0.001;
}
}
double getValue() {
return cv_;
}
private:
bool init_{false};
double cv_{0};
};
int main() {
MovingMagic magic;
double sum = 0;
for (size_t i = 10000; i > 0; --i) {
double value = i;
magic.updateValue(value);
sum += value;
}
std::cout << magic.getValue() << " " << sum / 10000 << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmNsYXNzIE1vdmluZ01hZ2ljIHsKCXB1YmxpYzoKCQl2b2lkIHVwZGF0ZVZhbHVlKGRvdWJsZSB4KSB7CgkJCWlmICghaW5pdF8pIHsKCQkJCWluaXRfID0gdHJ1ZTsKCQkJCWN2XyA9IHg7CgkJCX0gZWxzZSB7CgkJCQljdl8gPSBjdl8gKiAwLjk5OSArIHggKiAwLjAwMTsKCQkJfQoJCX0KCQkKCQlkb3VibGUgZ2V0VmFsdWUoKSB7CgkJCXJldHVybiBjdl87CgkJfQoJcHJpdmF0ZToKCQlib29sIGluaXRfe2ZhbHNlfTsKCQlkb3VibGUgY3ZfezB9Owp9OwoKaW50IG1haW4oKSB7CglNb3ZpbmdNYWdpYyBtYWdpYzsKCWRvdWJsZSBzdW0gPSAwOwoJZm9yIChzaXplX3QgaSA9IDEwMDAwOyBpID4gMDsgLS1pKSB7CgkJZG91YmxlIHZhbHVlID0gaTsKCQltYWdpYy51cGRhdGVWYWx1ZSh2YWx1ZSk7CgkJc3VtICs9IHZhbHVlOwoJfQoJc3RkOjpjb3V0IDw8IG1hZ2ljLmdldFZhbHVlKCkgPDwgIiAiIDw8IHN1bSAvIDEwMDAwIDw8IHN0ZDo6ZW5kbDsKCXJldHVybiAwOwp9