1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <functional> #include <iostream> #include <type_traits> #include <utility> template <typename F, typename T> T foldr1(F&& f, T&& x) { return std::forward<T>(x); } template <typename F, typename T, typename ...Args> typename std::common_type<T, Args...>::type foldr1(F&& f, T&& x, Args&&... args) { return f(std::forward<T>(x), foldr1(std::forward<F>(f), std::forward<Args>(args)...)); } template <typename F, typename T> T foldl1(F&& f, T&& x) { return std::forward<T>(x); } template <typename F, typename T, typename U> typename std::common_type<T,U>::type foldl1(F&& f, T&& x, U&& y) { return f(std::forward<T>(x), std::forward<U>(y)); } template <typename F, typename T, typename ...Args> typename std::common_type<T, Args...>::type foldl1(F&& f, T&& x, T&& y, Args&&... args) { return foldl1(std::forward<F>(f), f(std::forward<T>(x), std::forward<T>(y)), std::forward<Args>(args)...); } int main() { std::cout << "(1 - (2 - (3 - 4))) = " << foldr1(std::minus<int>(), 1, 2, 3, 4) << '\n'; std::cout << "(((1 - 2) - 3) - 4) = " << foldl1(std::minus<int>(), 1, 2, 3, 4) << '\n'; } |
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8dXRpbGl0eT4KCnRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZSBUPiBUIGZvbGRyMShGJiYgZiwgVCYmIHgpIHsgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxUPih4KTsgfQoKdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIC4uLkFyZ3M+CnR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8VCwgQXJncy4uLj46OnR5cGUgZm9sZHIxKEYmJiBmLCBUJiYgeCwgQXJncyYmLi4uIGFyZ3MpCnsKICByZXR1cm4gZihzdGQ6OmZvcndhcmQ8VD4oeCksIGZvbGRyMShzdGQ6OmZvcndhcmQ8Rj4oZiksIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUgVD4gVCBmb2xkbDEoRiYmIGYsIFQmJiB4KSB7IHJldHVybiBzdGQ6OmZvcndhcmQ8VD4oeCk7IH0KdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CnR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8VCxVPjo6dHlwZSBmb2xkbDEoRiYmIGYsIFQmJiB4LCBVJiYgeSkgewogIHJldHVybiBmKHN0ZDo6Zm9yd2FyZDxUPih4KSwgc3RkOjpmb3J3YXJkPFU+KHkpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIC4uLkFyZ3M+CnR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8VCwgQXJncy4uLj46OnR5cGUgZm9sZGwxKEYmJiBmLCBUJiYgeCwgVCYmIHksIEFyZ3MmJi4uLiBhcmdzKQp7CiAgcmV0dXJuIGZvbGRsMShzdGQ6OmZvcndhcmQ8Rj4oZiksIGYoc3RkOjpmb3J3YXJkPFQ+KHgpLCBzdGQ6OmZvcndhcmQ8VD4oeSkpLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwp9CgppbnQgbWFpbigpCnsKICBzdGQ6OmNvdXQgPDwgIigxIC0gKDIgLSAoMyAtIDQpKSkgPSAiIDw8IGZvbGRyMShzdGQ6Om1pbnVzPGludD4oKSwgMSwgMiwgMywgNCkgPDwgJ1xuJzsKICBzdGQ6OmNvdXQgPDwgIigoKDEgLSAyKSAtIDMpIC0gNCkgPSAiIDw8IGZvbGRsMShzdGQ6Om1pbnVzPGludD4oKSwgMSwgMiwgMywgNCkgPDwgJ1xuJzsKfQo=
-
upload with new input
-
result: Success time: 0s memory: 2828 kB returned value: 0
(1 - (2 - (3 - 4))) = -2 (((1 - 2) - 3) - 4) = -8


