Dado un límite máximo de coordenada x e y, queremos calcular un conjunto de coordenadas tal que la distancia entre dos puntos cualesquiera sea un número no entero. Las coordenadas (i, j) elegidas deben estar en el rango 0<=i<=x y 0<=j<=y. Además, tenemos que maximizar el conjunto.
Ejemplos:
Input : 4 4 Output : 0 4 1 3 2 2 3 1 4 0 Explanation : Distance between any two points mentioned in output is not integer.
En primer lugar, queremos crear un conjunto, lo que significa que nuestro conjunto no puede contener ningún otro punto con las mismas x o y que se usaron antes. Bueno, la razón detrás de esto es que esos puntos que tienen la misma coordenada x o la misma coordenada y cancelarían esa coordenada, dando como resultado una distancia integral entre ellos.
Ejemplo, considere los puntos (1, 4) y (1, 5), la coordenada x se cancelaría y, por lo tanto, obtendremos una distancia integral.
En segundo lugar, podemos observar que solo tenemos x+1 coordenadas i distintas e y+1 coordenadas j distintas. Por lo tanto, el tamaño del conjunto no puede exceder min(x, y)+1.
La tercera observación es que sabemos que los elementos diagonales están separados por |ij|* distancia, por lo tanto, evaluamos a lo largo del elemento diagonal de la coordenada i y calculamos la coordenada j mediante la fórmula min(i, j)-i.
C++
// C++ program to find maximum integral points // such that distances between any two is not // integer. #include <bits/stdc++.h> using namespace std; // Making set of coordinates such that // any two points are non-integral distance apart void printSet(int x, int y) { // used to avoid duplicates in result set<pair<int, int> > arr; for (int i = 0; i <= min(x, y); i++) { pair<int, int> pq; pq = make_pair(i, min(x, y) - i); arr.insert(pq); } for (auto it = arr.begin(); it != arr.end(); it++) cout << (*it).first << " " << (*it).second << endl; } // Driver function int main() { int x = 4, y = 4; printSet(x, y); return 0; }
Java
// Java program to find maximum integral points // such that distances between any two is not // integer. // helper class to store pair of a set. class Pair { // Pair attributes public int index; public int value; // Constructor to initialize pair public Pair(int index, int value) { // This keyword refers to current instance this.index = index; this.value = value; } } public class Main { // Making set of coordinates such that // any two points are non-integral distance apart static void printSet(int x, int y) { // used to avoid duplicates in result // set<pair<int, int> > arr; HashSet<String> arr = new HashSet<>(); for (int i = 0; i <= Math.min(x, y); i++) { Pair pq = new Pair(i, Math.min(x, y) - i); arr.add(pq.index + " " + pq.value); } for (String e : arr) { System.out.println(e); } } public static void main(String[] args) { int x = 4, y = 4; printSet(x, y); } } // The code is contributed by Gautam goel (gautamgoel962)
Python3
# Python3 program to find maximum integral points # such that distances between any two is not # integer. # Making set of coordinates such that # any two points are non-integral distance apart def printSet(x, y): # Used to avoid duplicates in result arr = [] for i in range(min(x, y) + 1): pq = [i, min(x, y) - i] arr.append(pq) for it in arr: print(it[0], it[1]) # Driver code if __name__ == "__main__": x = 4 y = 4 printSet(x, y) # This code is contributed by ukasp
C#
// C# program to find maximum integral points // such that distances between any two is not // integer. using System; using System.Collections.Generic; // helper class to store pair of a set. class Pair { // Pair attributes public int index; public int value; // Constructor to initialize pair public Pair(int index, int value) { // This keyword refers to current instance this.index = index; this.value = value; } } public class GFG { // Making set of coordinates such that // any two points are non-integral distance apart static void printSet(int x, int y) { // used to avoid duplicates in result // set<pair<int, int> > arr; HashSet<String> arr = new HashSet<String>(); for (int i = 0; i <= Math.Min(x, y); i++) { Pair pq = new Pair(i, Math.Min(x, y) - i); arr.Add(pq.index + " " + pq.value); } foreach (String e in arr) { Console.WriteLine(e); } } public static void Main() { int x = 4, y = 4; printSet(x, y); } } // The code is contributed by Saurabh Jaiswal
Javascript
<script> // Javascript program to find maximum integral points // such that distances between any two is not // integer. // Making set of coordinates such that // any two points are non-integral distance apart function printSet(x,y) { // used to avoid duplicates in result arr=[]; for (let i = 0; i <= Math.min(x, y); i++) { let pq = [i, Math.min(x, y) - i]; arr.push(pq); } // document.write(arr); for (let [key,value] of arr.entries()) { document.write(value[0]+" "+value[1]+"<br>") } } // Driver function let x = 4; let y = 4; printSet(x, y) // This code is contributed by rag2127 </script>
Producción:
0 4 1 3 2 2 3 1 4 0
Complejidad de tiempo: O (nlogn), donde n es min (x, y) ya que estamos usando un bucle para atravesar min (x, y) veces.
Espacio auxiliar: O(n), donde n es min(x,y) ya que estamos usando espacio adicional para el conjunto arr .