interface CustomFunction {
public:
// Returns some positive integer f(x, y) for two positive integers x and y based on a formula.
int f(int x, int y);
};
你的解决方案将按如下规则进行评判:
判题程序有一个由 CustomFunction 的 9 种实现组成的列表,以及一种为特定的 z 生成所有有效数对的答案的方法。
""" This is the custom function interface. You should not implement it, or speculate about its implementation class CustomFunction: # Returns f(x, y) for any given positive integers x and y. # Note that f(x, y) is increasing with respect to both x and y. # i.e. f(x, y) < f(x + 1, y), f(x, y) < f(x, y + 1) def f(self, x, y):"""classSolution:deffindSolution(self,customfunction:"CustomFunction",z:int)->List[List[int]]:ans=[]forxinrange(1,z+1):y=1+bisect_left(range(1,z+1),z,key=lambday:customfunction.f(x,y))ifcustomfunction.f(x,y)==z:ans.append([x,y])returnans
/* * // This is the custom function interface. * // You should not implement it, or speculate about its implementation * class CustomFunction { * // Returns f(x, y) for any given positive integers x and y. * // Note that f(x, y) is increasing with respect to both x and y. * // i.e. f(x, y) < f(x + 1, y), f(x, y) < f(x, y + 1) * public int f(int x, int y); * }; */classSolution{publicList<List<Integer>>findSolution(CustomFunctioncustomfunction,intz){List<List<Integer>>ans=newArrayList<>();for(intx=1;x<=1000;++x){intl=1,r=1000;while(l<r){intmid=(l+r)>>1;if(customfunction.f(x,mid)>=z){r=mid;}else{l=mid+1;}}if(customfunction.f(x,l)==z){ans.add(Arrays.asList(x,l));}}returnans;}}
/* * // This is the custom function interface. * // You should not implement it, or speculate about its implementation * class CustomFunction { * public: * // Returns f(x, y) for any given positive integers x and y. * // Note that f(x, y) is increasing with respect to both x and y. * // i.e. f(x, y) < f(x + 1, y), f(x, y) < f(x, y + 1) * int f(int x, int y); * }; */classSolution{public:vector<vector<int>>findSolution(CustomFunction&customfunction,intz){vector<vector<int>>ans;for(intx=1;x<=1000;++x){intl=1,r=1000;while(l<r){intmid=(l+r)>>1;if(customfunction.f(x,mid)>=z){r=mid;}else{l=mid+1;}}if(customfunction.f(x,l)==z){ans.push_back({x,l});}}returnans;}};
1 2 3 4 5 6 7 8 9101112131415161718
/** * This is the declaration of customFunction API. * @param x int * @param x int * @return Returns f(x, y) for any given positive integers x and y. * Note that f(x, y) is increasing with respect to both x and y. * i.e. f(x, y) < f(x + 1, y), f(x, y) < f(x, y + 1) */funcfindSolution(customFunctionfunc(int,int)int,zint)(ans[][]int){forx:=1;x<=1000;x++{y:=1+sort.Search(999,func(yint)bool{returncustomFunction(x,y+1)>=z})ifcustomFunction(x,y)==z{ans=append(ans,[]int{x,y})}}return}
/** * // This is the CustomFunction's API interface. * // You should not implement it, or speculate about its implementation * class CustomFunction { * f(x: number, y: number): number {} * } */functionfindSolution(customfunction:CustomFunction,z:number):number[][]{constans:number[][]=[];for(letx=1;x<=1000;++x){letl=1;letr=1000;while(l<r){constmid=(l+r)>>1;if(customfunction.f(x,mid)>=z){r=mid;}else{l=mid+1;}}if(customfunction.f(x,l)==z){ans.push([x,l]);}}returnans;}
方法二:双指针
我们可以定义两个指针 $x$ 和 $y$,初始时 $x = 1$, $y = z$。
如果 $f(x, y) = z$,我们将 $(x, y)$ 加入答案中,然后 $x \leftarrow x + 1$, $y \leftarrow y - 1$;
""" This is the custom function interface. You should not implement it, or speculate about its implementation class CustomFunction: # Returns f(x, y) for any given positive integers x and y. # Note that f(x, y) is increasing with respect to both x and y. # i.e. f(x, y) < f(x + 1, y), f(x, y) < f(x, y + 1) def f(self, x, y):"""classSolution:deffindSolution(self,customfunction:"CustomFunction",z:int)->List[List[int]]:ans=[]x,y=1,1000whilex<=1000andy:t=customfunction.f(x,y)ift<z:x+=1elift>z:y-=1else:ans.append([x,y])x,y=x+1,y-1returnans
/* * // This is the custom function interface. * // You should not implement it, or speculate about its implementation * class CustomFunction { * // Returns f(x, y) for any given positive integers x and y. * // Note that f(x, y) is increasing with respect to both x and y. * // i.e. f(x, y) < f(x + 1, y), f(x, y) < f(x, y + 1) * public int f(int x, int y); * }; */classSolution{publicList<List<Integer>>findSolution(CustomFunctioncustomfunction,intz){List<List<Integer>>ans=newArrayList<>();intx=1,y=1000;while(x<=1000&&y>0){intt=customfunction.f(x,y);if(t<z){x++;}elseif(t>z){y--;}else{ans.add(Arrays.asList(x++,y--));}}returnans;}}
/* * // This is the custom function interface. * // You should not implement it, or speculate about its implementation * class CustomFunction { * public: * // Returns f(x, y) for any given positive integers x and y. * // Note that f(x, y) is increasing with respect to both x and y. * // i.e. f(x, y) < f(x + 1, y), f(x, y) < f(x, y + 1) * int f(int x, int y); * }; */classSolution{public:vector<vector<int>>findSolution(CustomFunction&customfunction,intz){vector<vector<int>>ans;intx=1,y=1000;while(x<=1000&&y){intt=customfunction.f(x,y);if(t<z){x++;}elseif(t>z){y--;}else{ans.push_back({x++,y--});}}returnans;}};
1 2 3 4 5 6 7 8 9101112131415161718192021222324
/** * This is the declaration of customFunction API. * @param x int * @param x int * @return Returns f(x, y) for any given positive integers x and y. * Note that f(x, y) is increasing with respect to both x and y. * i.e. f(x, y) < f(x + 1, y), f(x, y) < f(x, y + 1) */funcfindSolution(customFunctionfunc(int,int)int,zint)(ans[][]int){x,y:=1,1000forx<=1000&&y>0{t:=customFunction(x,y)ift<z{x++}elseift>z{y--}else{ans=append(ans,[]int{x,y})x,y=x+1,y-1}}return}
1 2 3 4 5 6 7 8 9101112131415161718192021222324
/** * // This is the CustomFunction's API interface. * // You should not implement it, or speculate about its implementation * class CustomFunction { * f(x: number, y: number): number {} * } */functionfindSolution(customfunction:CustomFunction,z:number):number[][]{letx=1;lety=1000;constans:number[][]=[];while(x<=1000&&y){constt=customfunction.f(x,y);if(t<z){++x;}elseif(t>z){--y;}else{ans.push([x--,y--]);}}returnans;}