0% encontró este documento útil (0 votos)
14 vistas8 páginas

Guía de Programación en C/C++

El documento proporciona una referencia rápida sobre programación en C/C++, incluyendo ejemplos de estructuras de datos como listas enlazadas y funciones para manipular cadenas. También se abordan conceptos como la entrada/salida de datos, el uso de vectores y la implementación de algoritmos para resolver problemas específicos, como la pesca y la penalización en competiciones. Se incluyen fragmentos de código que ilustran la lógica detrás de cada concepto y problema presentado.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
14 vistas8 páginas

Guía de Programación en C/C++

El documento proporciona una referencia rápida sobre programación en C/C++, incluyendo ejemplos de estructuras de datos como listas enlazadas y funciones para manipular cadenas. También se abordan conceptos como la entrada/salida de datos, el uso de vectores y la implementación de algoritmos para resolver problemas específicos, como la pesca y la penalización en competiciones. Se incluyen fragmentos de código que ilustran la lógica detrás de cada concepto y problema presentado.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Escriu // printf(“Hola”); printf(“%d”, x);

llegeix // scanf(“%d” &x);


const a = 0 // #define a=x
int a
float a
if(){}
else(){}
salt de linea // \n
Tab // \t

d// int
xf// float(x to determine number of decimals, only on output)

Vector // tipo_elemento nombre[largaria]; (largaria no se puede cambiar)

Rel quadrada: sqrt()

No intentar agafar dades d’un vector més enllà dels seus límits
Per si/no emprar bool
long int / long long int
intentar no emprar while

Node llista enllaçada definir


—-
typedef struct node {
int val;
struct node * next;
} node_t;
—-----
#include <stdlib.h>
#include <string.h>
#include <bits/stdc++.h> para incluir todo

struct Node {

// Any data type can be stored in this node


void *data;
struct Node *next;
};

// Function to insert data at head. This functions requires


// the size of the data type as extra argument
struct Node* insertAtHead(struct Node* head, void *data,
size_t data_size) {

// Allocate memory for node


struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

newNode->data = malloc(data_size);
newNode->next = head;

// Copy contents of data to newly allocated memory.


memcpy(newNode->data, data, data_size);

return newNode;
}

// Function that access and prints the linked list. This function needs
// to know how many bytes of memory is to be read to print the data
// So a function pointer is required for printing different data type
void printList(struct Node *head, void (*fptr)(void *)) {
while (head != NULL) {
(*fptr)(head->data);
head = head->next;
}
}

// Helper function to print an integer


void printInt(void *n) {
printf(" %d", *(int *)n);
}

// Helper function to print a float


void printFloat(void *f) {
printf(" %f", *(float *)f);
}

Invertir string
​ #include <string.h>

​ // function definition of the revstr()
​ void revstr(char *str1)
​ {
​ // declare variable
​ int i, len, temp;
​ len = strlen(str1); // use strlen() to get the length of str string

​ // use for loop to iterate the string
​ for (i = 0; i < len/2; i++)
​ {
​ // temp variable use to temporary hold the string
​ temp = str1[i];
​ str1[i] = str1[len - i - 1];
​ str1[len - i - 1] = temp;
​ }
​ }

void hello(); // Declaring

int main() { // main function


hello(); // Calling
}
void hello() { // Defining
std::cout << "Hello QuickRef!\n";
}
—--

int add(int a, int b) {


return a + b;
}
Cuando usamos if's y while's, si el contenido es únicamente una instrucción podemos ahorrarnos las
llaves:
int num;
cin >> num;
while (num-- > 0)
if (num % 2 != 0)
cout << num << endl;

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n; cin >> n;
vector<tuple<int, int, int>> v(n);
for(int i = 0; i < n; i++){
int l, r; cin >> l >> r;
v[i] = {l, r, i};
}
sort([Link](), [Link]());
vector<int> ans(n);
int mx = 0;
priority_queue<pair<int, int>> pq; //Ordena de mayor a menor, como queremos extraer primero los
menores,
//le pasaremos -r.
set<int> habitacionesLibres;
for(auto [l, r, customer] : v){
while(![Link]() && -[Link]().first < l){
int habitacionLibre = [Link]().second;
[Link]();
[Link](habitacionLibre);
}
if([Link]()){
mx++;
ans[customer] = mx;
}else{
int hab = *[Link](); [Link]([Link]());
ans[customer] = hab;
}
[Link]({-r, ans[customer]});
}
cout << mx << "\n";
for(int x : ans) cout << x << " ";
cout << "\n";
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int n, m;
vector<int> topo, adj[2][N];
bitset<N> vis;
void dfs(int x) {
vis[x] = 1;
for (int &y : adj[0][x]) {
if (vis[y]) continue;
dfs(y);
}
topo.push_back(x);
}
void dfs2(int x) {
vis[x] = 1;
for (int &y : adj[1][x]) {
if (vis[y]) continue;
dfs2(y);
}
}
void dfs3(int x) {
vis[x] = 1;
for (int &y : adj[0][x]) {
if (vis[y]) continue;
dfs3(y);
}
}
signed main() {
ios::sync_with_stdio(false); [Link](nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
x--; y--;
adj[0][x].push_back(y);
adj[1][y].push_back(x);
}
// ordenacion topologica
for (int i = 0; i < n; i++) {
if (vis[i]) continue;
dfs(i);
}
reverse([Link](), [Link]());
[Link]();
//
int k = 0;
vector<int> vt;
for (int &x : topo) {
if (vis[x]) continue;
dfs2(x);
k++;
vt.push_back(x);
}
if (k == 1) {
cout << "YES\n";
}
else {
int x = vt[0];
int y = vt[1];
[Link]();
dfs3(x);
cout << "NO\n";
if (vis[y]) {
cout << y+1 << " " << x+1 << "\n";
}
else {
cout << x+1 << " " << y+1 << "\n";
}
}
}
MCD
int mcd(int a, int b) {
if (a < b)
return mcd(b, a);
int res = a % b;
if (res == 0)
return b;
return mcd(b, res);
}
int main()
{
int k;
cin >> k;
while (k != 0) {
int v1;
int v2;
cin >> v1;
cin >> v2;
int resultado = mcd(v1, v2);
for (int i = 2; i < k; ++i) {
int v;
cin >> v;
resultado = mcd(resultado, v);
}
cout << resultado << '\n';
cin >> k;
}
return 0;
}
H. Pescando
Hoy hemos salido a pescar con la barca. Para ello hacemos el recorrido Palma-Cabrera en
línea recta. Cada cinco metros nos encontramos con un pez que tiene un determinado peso,
y podemos decidir si pescarlo o no. Como queremos pescar la mayor cantidad de pescado
(en peso, no en número) nos gustaría pescarlos todos. Pero si pescamos un pez no
podemos pescar los dos siguientes, ya que tenemos que quitarlo del anzuelo y guardarlo en
la nevera. Nuestro amigo Neptuno nos ha chivado los peces que nos vamos a encontrar, y
tenemos que determinar cuál es el peso máximo que podemos pescar.
Entrada y salida
Cada línea es un caso de uso. El primer número es el número de peces que nos vamos a
encontrar (n) , y a continuación el peso de dichos peces, que será siempre un número
entero mayor que cero (pi ≥ 1)i ∈ {1, ..., n} . Termina con una linea con 0 peces. La salida
debe ser el peso máximo que podemos pescar.
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

// < [Link] > [Link]

int main()
{
int num_peces;
cin >> num_peces;
int v1;
int v2;
int v3;
int v4;
int nv;
while (num_peces != 0) {
int v;
cin >> v1;
cin >> v2;
cin >> v3;
v2 = max(v1, v2);
v3 = max(v2, v3);
int n = 3;
while (n < num_peces) {
cin >> nv;
v4 = max(v1 + nv, max(v2, v3));
v1 = v2;
v2 = v3;
v3 = v4;
++n;
}
cout << v3 << "\n";
cin >> num_peces;
}
return 0;
}

G. La olimpiada

#include <stdio.h>

int main() {
int c; // Número de casos de prueba
scanf("%d", &c);

while (c--) {
int m, n; // Número de estudiantes (m) y número de problemas (n)
scanf("%d %d", &m, &n);

int tiempos[m][n]; // Matriz para los tiempos de cada estudiante


int penalizaciones[m]; // Array para las penalizaciones totales de cada estudiante

// Leer los tiempos de cada estudiante


for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &tiempos[i][j]);
}
}

// Inicializar las penalizaciones a cero


for (int i = 0; i < m; i++) {
penalizaciones[i] = 0;
}

int total_envios = 0; // Contador global de envíos correctos


int tiempo_acumulado = 0;

// Procesar cada problema


for (int j = 0; j < n; j++) {
for (int i = 0; i < m; i++) {
tiempo_acumulado += tiempos[i][j]; // Sumar el tiempo que tarda el estudiante i en
el problema j
penalizaciones[i] += tiempo_acumulado * total_envios; // Calcular la penalización
de este envío
total_envios++; // Incrementar el número de envíos
}
}

// Imprimir las penalizaciones de todos los estudiantes para este caso


for (int i = 0; i < m; i++) {
printf("%d ", penalizaciones[i]);
}
printf("\n");
}

return 0;
}

También podría gustarte