Chuletas y apuntes de Informática y Telecomunicaciones

Solución a Problemas de Programación Competitiva en C++: Algoritmos Greedy, DP y Grafos

Informática y Telecomunicaciones9,1 KB

Recopilación de soluciones optimizadas e implementadas en C++ para diversos ejercicios clásicos de programación competitiva, abarcando técnicas como ordenamiento voraz (greedy), programación dinámica (DP), recorridos en grafos (DFS y BFS) y teoría de números.

A - Shoemaker's Problem

Enfoque: Algoritmo voraz (greedy) mediante ordenación personalizada basada en la relación costo/beneficio entre la multa y el tiempo requerido.

#include <iostream>
#include <algorithm>
using namespace std;

int tiempo[1000];
int multa[1000];
int trab[1000];

bool comp(int a, int b) {
    double res1 = (double)multa[a] / tiempo[a];
    double res2 = (double)multa[b] / tiempo[b];
    if (res1 == res2)
        return a < b;
    return res1 >
...
Continuar leyendo "Solución a Problemas de Programación Competitiva en C++: Algoritmos Greedy, DP y Grafos" »

Conteo de inversiones, componentes conexas y profundidad acumulada en árboles binarios de búsqueda en C++

Informática y Telecomunicaciones4,17 KB

Programas en C++ de algoritmos y estructuras de datos

A continuación se presentan tres programas en C++ que resuelven problemas clásicos de algoritmia: el conteo de inversiones mediante una variante de merge sort, el conteo de componentes conexas en una imagen mediante DFS, y el cálculo de la profundidad acumulada al insertar elementos en un árbol binario de búsqueda.

1. Conteo de inversiones con merge sort

El siguiente código cuenta el número de inversiones de un arreglo, es decir, pares de índices i < j tales que a[i] > a[j]. Utiliza la técnica de divide y vencerás durante la fase de mezcla.

#include <bits/stdc++.h>
using namespace std;

long long merge_count(vector<long long>& a, int l, int r) {
    if (r - l
...
Continuar leyendo "Conteo de inversiones, componentes conexas y profundidad acumulada en árboles binarios de búsqueda en C++" »

Ejercicios Resueltos de Programación en Python: Algoritmos y Estructuras de Datos

Informática y Telecomunicaciones8,51 KB

Búsqueda y combinación de contactos

Funciones para la gestión, búsqueda y fusión ordenada de colecciones de contactos.

def search_phone(c1: tuple, nombre: str) -> int:
    res = None
    for i in range(len(c1)):
        if c1[i][0] == nombre:
            res = nombre
    return res

def combine(c1: list[Contact], c2: list[Contact]) -> list[Contact]:
    i = 0
    j = 0
    res = []
    while i < len(c1) and j < len(c2):
        if c1[i][0] < c2[j][0]:
            res.append(c1[i])
            i += 1
        elif c1[i][0] > c2[j][0]:
            res.append(c2[j])
            j += 1
        else:
            res.append(c1[i])
            i += 1
            j += 1
    while i < len(c1):
        res.append(c1[i])
...
Continuar leyendo "Ejercicios Resueltos de Programación en Python: Algoritmos y Estructuras de Datos" »

Animaciones interactivas con p5.js: círculos, pelotas, botones y efectos visuales

Informática y Telecomunicaciones11,24 KB

Cinco círculos que crecen y paran

var tam = [];

var creix = [];

var x = [];

var y = [];

function setup() {

  createCanvas(400, 400);

  for (var i = 0; i < 5; i++) {

    x[i] = random(width);

    y[i] = random(height);

    tam[i] = 0; // Diámetro inicial del círculo

    creix[i] = true; // Los círculos comienzan a crecer

  }

}

function draw() {

  background(0);

  for (var i = 0; i < 5; i++) {

    ellipse(x[i], y[i], tam[i], tam[i]); // Dibujar el círculo

    if (creix[i]) {

      tam[i] = tam[i] + 1;

    }

    var d = dist(mouseX, mouseY, x[i], y[i]);

    if (d < tam[i] / 2 && mouseIsPressed && mouseButton == LEFT) {

      creix[i] = false;

    }

    if (d < tam[i] / 2...

Continuar leyendo "Animaciones interactivas con p5.js: círculos, pelotas, botones y efectos visuales" »

Subida de Ficheros y Validación de Formularios en PHP: Implementación Práctica

Informática y Telecomunicaciones5,4 KB

Subida de Ficheros y Procesamiento de Formularios en PHP

A continuación se presenta la implementación para la gestión, validación y almacenamiento de noticias con ficheros adjuntos (imágenes) mediante PHP y un formulario HTML con codificación multipart/form-data.

Código Completo: Formulario y Procesamiento

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8" />
  <title>Subida de ficheros</title>
</head>
<body>
<?php
if (isset($_POST['enviar'])) {
?>
  <h2>Subida de ficheros. Resultados del formulario</h2>
  <h3>Resultado de la inserción de nueva noticia</h3>
<?php
  $titulo = $_POST['titulo'];
  $texto = $_POST['texto'];
  $categoria = $_POST['
...
Continuar leyendo "Subida de Ficheros y Validación de Formularios en PHP: Implementación Práctica" »

Protocol HTTP: GET, POST, cookies i cistella de la compra

Informática y Telecomunicaciones4,78 KB

Albert Pons <[email protected]>

23:52 (fa 6 minuts)
para mí

L'usuari demana al servidor prova.com el document que es troba a /productes/test/info.html.

Petició del client al servidor (XXX significa la informació pertinent):

GET /productes/test/info.html HTTP/1.1
START LINE
Date: XXX
Connection: close
GENERAL HEADER
Host: XXX

Resposta del servidor al client:

HTTP/1.1 200 OK
START LINE
Date: XXX
Connection: close
GENERAL HEADER
Server: XXX
RESPONSE HEADER
Content-Type: text/html
Content-Length: XXX
ENTITY HEADER

EMPTY LINE
<!DOCTYPE html>
XXX
</html>

L'usuari envia el formulari

Petició del client al servidor:

GET /productes/test/upload_info.php?name=Joan&age=21&updates=yes HTTP/1.1
START LINE
Date: XXX
Connection:
...
Continuar leyendo "Protocol HTTP: GET, POST, cookies i cistella de la compra" »

Examen Práctico de Administración de Sistemas Linux: Usuarios, Grupos, LVM, Cuotas y Módulos del Kernel

Informática y Telecomunicaciones7,36 KB

1. Configuración de usuarios y grupos

a) Configuración de la información de finger en el inicio de sesión

Modificaremos el fichero /etc/skel/.bash_profile, de forma que se muestre la información de finger para el usuario en cada inicio de sesión:

[root@localhost ~]# cat /etc/skel/.bash_profile

b) Creación de grupos

Creamos los grupos iso y aec tal y como se nos pide:

[root@localhost ~]# groupadd iso
[root@localhost ~]# groupadd aec

c) Creación de cuentas de usuario

Creamos primero las cuentas de usuario con las características indicadas. Después, usamos la orden groups para comprobar los grupos:

[root@localhost ~]# useradd -c "José González" -g iso -G alumno pepito
[root@localhost ~]# useradd -c "Juan Martínez" -g aec -G alumno juanito
...
Continuar leyendo "Examen Práctico de Administración de Sistemas Linux: Usuarios, Grupos, LVM, Cuotas y Módulos del Kernel" »

Configuración Paso a Paso de Switches y Routers Cisco IOS: VLANs y Port Security

Informática y Telecomunicaciones3,6 KB

Configuración de Redes Cisco: Switches y Routers

Configuración Inicial del Switch

enable
configure terminal
hostname SW1-AA

line console 0
password cisco
login
logging synchronous // Seguir escribiendo sin interrupciones.

line vty 0 15 // Sostiene hasta 16 sesiones remotas.
password cisco
login
logging synchronous // Seguir escribiendo sin interrupciones.

enable secret cisco
service password-encryption
banner motd # Solo personal autorizado #

Creación y Gestión de VLANs

vlan 10 // Crea la VLAN
name Estudiantes // Le asigna nombre

vlan 20
name Profesores

vlan 30
name Invitados

vlan 99
name Admin&Nativa

interface vlan 99 // Configura la interfaz virtual de administración
ip address 192.168.99.1 255.255.255.0 // Asigna IP al troncal
...
Continuar leyendo "Configuración Paso a Paso de Switches y Routers Cisco IOS: VLANs y Port Security" »

Programa en C para Gestionar un Inventario de Motos con Listas Enlazadas: Código Comentado

Informática y Telecomunicaciones9,72 KB

Librerías necesarias

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <stdbool.h>
#include <windows.h>
#include <string.h>

Definición de constantes y variables globales

Definimos una variable para la dimensión de las cadenas de texto:

#define DIM 50

Fichero que vamos a utilizar para almacenar los datos:

FILE *Datos;

Estructura de datos

struct producto {
char marca[DIM];
char modelo[DIM];
int unidades;
float precio;
int carnet;
};
struct Nodo {
struct producto datos;
struct Nodo *sig;
};

Punteros globales utilizados para recorrer y gestionar la lista enlazada:

struct Nodo *cabecera;
struct Nodo *fin;
struct Nodo *aux;
struct Nodo *nuevo;
struct Nodo *borrador;
struct producto moto;

Función menú

int menu(
...
Continuar leyendo "Programa en C para Gestionar un Inventario de Motos con Listas Enlazadas: Código Comentado" »

Listas Enlazadas en MIPS: Implementación de Nodos, Inserción e Impresión

Informática y Telecomunicaciones3,18 KB

Listas enlazadas en ensamblador MIPS

A continuación se muestra la implementación de una lista enlazada de caracteres en ensamblador MIPS. El programa crea un primer nodo, solicita al usuario caracteres hasta que pulse Enter ('\n'), inserta cada carácter en un nuevo nodo al final de la lista y, finalmente, imprime toda la lista.

Parte I: Creación del primer nodo

li $a0, '>'        # Crear el primer nodo, inicializado con el carácter '>'
jal create
move $s0, $v0        # $s0 debe apuntar al primer nodo
move $a0, $s0        # Imprimir el nodo aislado
jal print_node

Parte II: Lectura de caracteres

Se piden caracteres al usuario hasta recibir '\n' (tecla Enter).

loop_input:
li $v0, 12           # Pedir carácter al usuario (read_char)
syscall
...
Continuar leyendo "Listas Enlazadas en MIPS: Implementación de Nodos, Inserción e Impresión" »