为此,您需要在整数上实现两个函数f和g,使得f∘g是严格减少的函数,而g∘f是严格增加的函数。换句话说,如果取任意两个整数a <b,则f(g(a))> f(g(b))和g(f(a))<g(f(b))。f和g分别没有限制,只不过它们必须分别将一个整数映射到另一个整数。
请提供对f和g的简短描述,以及有关为什么它们具有必需属性的参数。
信用:这项挑战的灵感来自2011年罗马尼亚数学硕士竞赛中的一个问题(该问题提出了相同的问题,但用实数而不是整数)。如果您真的想要破坏者,那么现在您知道要搜索什么。
规则
应该从将一个整数映射到另一个整数的数学意义上来理解此挑战中的“函数”一词:您可以编写两个程序或两个函数,并像往常一样使用接收和提供输出的任何标准方法。您可以使用整数的字符串表示形式来代替实际的整数变量,但是输入和输出的类型应该相同,以便可以在不手动转换类型的情况下组成函数。请记住,从概念上讲,f和g仍需要是ℤ上的函数,因此您不能通过使用相同数字或类似形式的两个不同的字符串表示形式作弊。
请记住,函数可以是未命名的,只要它们本身或您定义的另一个函数不需要它们的名称即可。如果您确实命名了这两个功能中的一个或两个,则可以假定它们存在于同一程序中,因此它们在实现中可以相互引用(例如,
def f(x): return -g(x)
在Python中)。通常的整数溢出规则适用:您的解决方案必须能够在语言的假设(或实际)版本中使用任意大整数,默认情况下,所有整数都是无界的,但是如果您的程序由于实现而在实践中失败不支持大整数,这不会使解决方案无效。
这是代码高尔夫球,因此您的得分是两个函数的字节数之和与最短有效答案的总和。