Blue Bridge Cup Pregunta 20200405

1. Clasificación rápida

public class KuaiSort {
	public static int quickSelect(int a[],int l,int r,int k) {
		Random rand=new Random();
		int p=rand.nextInt(r-l+1)+l;
		int x=a[p];
		int tmp=a[p];
		a[p]=a[r];
		a[r]=tmp;
		int i=l,j=r;
		while(i<j) {
			while(i<j&&a[i]<x) i++;
			if(i<j) {
				a[j]=a[i];
				j--;
			}
			while(i<j && a[j]>x) j--;
			if(i<j) {
				a[i]=a[j];
				i++;
			}
		
		}
		a[i]=x;
		p=i;
		if(i-l+1==k) return a[i];
		if(i-l+1<k) return quickSelect(a,i+1,r,k-i+l-1);
		else return quickSelect(a, l, i-1, k);
		
	}
	public static void main(String[] args) {
		int[] a= {1,4,2,8,5,7};
		System.out.println(quickSelect(a, 0, 5, 2));
	}
}

2. Polilínea espiral

La polilínea espiral que se muestra en la Figura p1.pgn pasa a través de todos los puntos completos en el plano exactamente una vez.
Para todo el punto (X, Y), definimos su distancia al origen, dis (X, Y), como la longitud del segmento de polilínea espiral desde el origen hasta (X, Y).

Por ejemplo, dis (0, 1) = 3, dis (-2, -1) = 9

Dadas las coordenadas de todo el punto (X, Y), ¿puedes calcular dis (X, Y)?

[Formato de entrada]
X e Y

Para datos del 40%, -1000 <= X, Y <= 1000
Para datos del 70%, -100000 <= X, Y <= 100000
Para datos del 100%, -1000000000 <= X, Y <= 1000000000

[Formato de
salida ] salida dis (X, Y)

【Ejemplo de entrada】
0 1

[Salida de muestra]
3

Convención de recursos:
consumo máximo de memoria (incluida la máquina virtual) <256
M de consumo de CPU <1000 ms

Imprima estrictamente de acuerdo con los requisitos y no imprima contenido adicional como: "Ingrese ..."

Todo el código se coloca en el mismo archivo fuente. Después de la depuración, copie y envíe el código fuente.
No use declaraciones de paquete. No use las funciones de jdk1.7 y superior.
El nombre de la clase principal debe ser: Principal, de lo contrario se maneja como código no válido.
Inserte la descripción de la imagen aquí

public class LuoXuan {

    public static void main(String[] args){
       Scanner input=new Scanner(System.in);
       int x=input.nextInt();
       int y=input.nextInt();
       System.out.println(dis(x,y));
    }        
    public static int dis(int x,int y){
        if(Math.abs(x)==Math.abs(y))
        {
            if(x>0&&y>0)
                return 4*x*x;
            else if(x>0&&y<0)
                return 4*x*x+2*x;
            else if(x<0&&y>0)
                return 4*x*x-2*y;
            else
                return 4*x*x-4*x;
        }
        else
        {
            if(x>0)
            {
                if(y>0)
                {
                   int max=Math.max(x, y);
                   if(x<y)
                      return 4*max*max-Math.abs(x-y);
                   else
                      return 4*max*max+Math.abs(x-y);
                }
                else
                {
                    y=-y;
                    int max=Math.max(x, y);
                    if(x<y)
                          return 4*max*max+2*max+Math.abs(x-y);
                     else
                          return 4*max*max+2*max-Math.abs(x-y);
                }
            }
            else
            {
                if(y>0)
                {
                     x=-x;
                     int max=Math.max(x,y);
                     if(x<y)
                          return 4*max*max-2*max+Math.abs(x-y);
                     else
                         return 4*max*max-2*max-Math.abs(x-y);
                }
                else
                {
                     x=-x;
                     y=-y;
                    int max=Math.max(x,y);
                    if(x<y)
                       return 4*max*max+4*max-Math.abs(x-y);
                    else
                       return 4*max*max+4*max+Math.abs(x-y)-8*max;
                 }
            }
        }
    }
}



3. Estadísticas de registro

Xiaoming mantiene un foro de programadores. Ahora ha recopilado un registro "me gusta" con un total de N líneas. El formato de cada línea es:

ts id

Indica que la publicación con el número de identificación en el momento de ts recibió un "Me gusta".

Ahora Xiaoming quiere contar qué publicaciones solían ser "publicaciones populares". Si una publicación ha recibido no menos de K Me gusta en cualquier período de tiempo de duración D, Xiao Ming piensa que esta publicación fue una "publicación importante".

Específicamente, si hay un cierto tiempo T que satisface la publicación durante el período de [T, T + D) (tenga en cuenta que está cerrado de izquierda a derecha), la publicación una vez estuvo "activa" Publicaciones ".

Dado el registro, ayude a Xiaoming a contar todos los números de publicaciones que fueron "publicaciones populares".

[Formato de entrada] La
primera línea contiene tres enteros N, D y K.
Cada registro en las siguientes N líneas contiene dos enteros ts e id.

Para el 50% de los datos, 1 <= K <= N <= 1000
Para el 100% de los datos, 1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000

[Formato de salida]
Salida ID de publicación activa en orden ascendente Una fila por cada id.

[Ejemplo de entrada]
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3

[Salida de muestra]
1
3

Convención de recursos:
consumo máximo de memoria (incluida la máquina virtual) <256
M de consumo de CPU <1000 ms

Imprima estrictamente de acuerdo con los requisitos y no imprima contenido adicional como: "Ingrese ..."

import java.util.ArrayList;
import static java.util.Collections.sort;
import java.util.Scanner;

public class Login {
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        int N=input.nextInt();
        int D=input.nextInt();
        int K=input.nextInt();
        final int MAX=100001;
        ArrayList<Obj>[] tsList=new ArrayList[MAX];
        for(int i=0;i<N;i++)
        {
            int ts=input.nextInt();
            int id=input.nextInt();
            Obj obj=new Obj();
            obj.ts=ts;
            if(tsList[id]==null)
                tsList[id]=new ArrayList<Obj>();
            tsList[id].add(obj);
        }
        for(int i=0;i<MAX;i++)
        {
            if(tsList[i]==null) continue;
            ArrayList<Obj>list=(ArrayList<Obj>)tsList[i].clone();
            sort(list);
            boolean key=false;
            for(int j=0;j<list.size();j++)
            {
                for(int m=list.size()-1;m>=j;m--)
                {
                    if(list.get(m).ts-list.get(j).ts<D&&m-j+1>=K)
                    {
                        key=true;
                        break;
                    }
                }
                if(key)
                {
                    System.out.println(i);
                    break;
                }
            }
         }
    }
    public static class Obj implements Comparable<Obj>{
        public int ts;
        Obj()
        {
            ts=0;
        }
        @Override
        public int compareTo(Obj o)
        {
            if(ts>o.ts)
                return 1;
            else if(ts<o.ts)
                return -1;
            else
                return 0;
        }
    }
}


44 artículos originales publicados · Me gusta2 · Visitas 540

Supongo que te gusta

Origin blog.csdn.net/qq_43699776/article/details/105333370
Recomendado
Clasificación