Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - KINGARZA

#1
Buenas a todos!
Pues como voy empezando en el mundo del desarrollo android me he propuesto desarrollar un TicTacToe, el problema radica en que no se como hacer que las tres celdas ocupen el mismo espacio proporcional.

Leí por internet que empleando android:layout_weight="1" se solucionaba, pero no...
Gracias por leerlo!

El código que empleo
Código (xml) [Seleccionar]

<TableRow
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        >

        <TextView
            android:id="@+id/uno"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"

            android:text="X"
            android:textSize="35sp"
            android:textColor="#000000"

            android:padding="25dp"
            android:gravity="center"
            android:background="#F78181"
            />

        <TextView
            android:id="@+id/dos"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"

            android:text="X"
            android:textSize="35sp"
            android:textColor="#000000"

            android:padding="25dp"
            android:gravity="center"
            android:background="#FF00FF"
            />
        <TextView
            android:id="@+id/tres"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"

            android:text="X"
            android:textSize="35sp"
            android:textColor="#000000"

            android:padding="25dp"
            android:gravity="center"
            android:background="#F78181"
            />
</TableRow>
#2
Buenas a todos!!

Hace poco tenia la siguiente cuestión:
https://foro.elhacker.net/dudas_generales/automatizar_tareas_en_la_web-t479005.0.html

Gracias a su apoyo he tenido un gran avance pero tengo una duda que no he encontrado como resolverla...

Antes que nada he hecho un formulario, el cual consta de 4 campos:
*ID
*Fecha de nacimiento

Cuando el usuario ingresa la información correcta (Id = A5 Dia = 1 Mes = 2 año = 3) en un nueva pagina se le da el mensaje de bienvenida, de lo contrario se abre una nueva pagina con el mensaje sigue intentando.

El problema es que supongamos el usuario olvida su contraseña y no hay otra manera de obtenerla mas que usando la bruta, el sabe que el ID solo consta de una letra mayúscula del alfabeto ingles y un numero, es decir el total de combinaciones posibles seria:
26 * 10 * 5 * 5 * 5 = 32500

Notar que la ID en este caso consta de una letra mayúscula del alfabeto ingles y un numero, los demás datos (día, mes, año) están limitados a 5 valores.

Intentar manualmente esas 32,500 combinaciones seria prácticamente imposible...

Encontré la manera de acceder desde el DOM a los campos del formulario:

document.getElementsByTagName("form")[0].ID.value
document.getElementsByTagName("form")[0].dia.value
document.getElementsByTagName("form")[0].mes.value
document.getElementsByTagName("form")[0].año.value
document.getElementById("Enviar").click()


Mi pregunta es la siguiente:

Como puedo intentar todas las posibles combinaciones hasta que ingrese los datos correctos, es decir, hasta que el formulario me envié a la pagina de bienvenido?

Mi idea es la siguiente (pero no se como llevarla acabo):

A cada campo del formulario le asigno el valor de una posible combinación, por ejemplo:

document.getElementsByTagName("form")[0].ID.value = "A1"
document.getElementsByTagName("form")[0].dia.value = "1"
document.getElementsByTagName("form")[0].mes.value = "1"
document.getElementsByTagName("form")[0].año.value = "1"
document.getElementById("Enviar").click()

Y después encuentro la manera de pegar ese código en la consola (cuando damos inspeccionar pagina) y si me da el mensaje de bienvenida pues excelente, allí paro, sino seguir intentado las demás combinaciones...

Dejo el código del formulario en HTML Y javascript y el generador de combinaciones en lenguaje C++

Código (javascript) [Seleccionar]

<html>

<head>
<title>"Example 1"</title>
</head>

<body>

<h1>Formulario</h1>
<br/>

<form target = "_blank" action = ""  method = "POST">

<input type = "text" id = "ID", name = "ID" placeholder = "Introduce tu ID aqui">
<select id = "dia" name = "dia">
<option value = "0">Selecciona el Dia</option>
<option value = "1">01</option>
<option value = "2">02</option>
<option value = "3">03</option>
<option value = "4">04</option>
<option value = "5">05</option>
</select>
<select id = "mes" name = "mes">
<option value = "0">Selecciona el Mes</option>
<option value = "1">01 Enero</option>
<option value = "2">02 Febrero</option>
<option value = "3">03 Marzo</option>
<option value = "4">04 Abril</option>
<option value = "5">05 Mayo</option>
</select>
<select id = "año" name = "año">
<option value = "0">Selecciona el año</option>
<option value = "1">2001</option>
<option value = "2">2002</option>
<option value = "3">2003</option>
<option value = "4">2004</option>
<option value = "5">2005</option>
</select>
<br/>
<br/>
<input type = "submit" id = "Enviar" name = "Enviar" value = "Enviar" onclick = "Evaluar()">

</form>

<script>
function Evaluar(){
var ID = document.getElementById("ID").value,
Dia = document.getElementById("dia").value,
Mes = document.getElementById("mes").value,
año = document.getElementById("año").value;
if(ID === "A5" && Dia === "1" && Mes === "2" && año === "3")
document.write("Bienvenido");
else
document.write("Sigue intentado");
}
</script>
</body>
</html>


Código (cpp) [Seleccionar]

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

vector<string>Combinacion;

void genera_combinaciones(){
   for(char i = 'A'; i <= 'Z'; i++)
       for(char j = '0'; j <= '9'; j++){
           string cad = "";
           cad.push_back(i);
           cad.push_back(j);
           Combinacion.push_back(cad);
       }
}

int main(){
   ofstream File("Combinaciones.txt");
   int t = 0;
   genera_combinaciones();
   for(int i = 0; i < Combinacion.size(); i++)
       for(int dia = 1; dia <= 5; dia++)
           for(int mes = 1; mes <= 5; mes++)
               for(int año = 1; año <= 5; año++)
                   File<<Combinacion[i]<<" "<<dia<<" "<<mes<<" "<<año<<"\n", t++;
   File<<"Total de combinaciones: "<<t;
   File.close();
}

Gracias por tu atencion :rolleyes:
#3
Buenas a todos!
Desde hacer tiempo que en mi colegio (cursando la preparatoria) suben las calificaciones en una plataforma en donde cada estudiante se le asigna una clave, ya con esta ingresas tu fecha de nacimiento y puedes entrar a tu cuenta para ver tu perfil.

Le pedí a varios amigos su clave y me doy cuenta que de 9 caracteres  los primeros 6 son los mismos, y los tres últimos (que son solo números) es lo que cambia.

Afortunadamente tengo fuertes conocimientos en algoritmos (y solo conozco el lenguaje C/C++), puedo obtener todas las combinaciones posibles, pero mi problema es:

Como lleno cada campo de la plataforma automáticamente?

Es decir, en vez de yo usuario copiar y pegar cada combinación (poner la clave, y fecha de nacimiento) en su campo correspondiente me gustaría hacer esto de manera automática

Si pudieran indicarme que aprender para hacer esto (realizar tareas iterativas automáticamente) o compartirme algún pdf relacionado estaría genial!
Cualquier información sirve, gracias por su atención!
#4
Hola a todos!
Quiero hacer una cola que guarde cinco valores y para ello estoy usando la estructura PAIR de c++, el problema esta en como acceder a estos elementos.

El codigo de abajo muestra como defino el estado y la cola de este tipo
Código (cpp) [Seleccionar]

#define Estado pair<int, pair<int, pair<int, pair<int, int> > > >
set<Estado>Cola;


Por ejemplo, se que para acceder al primer elemento es:
Código (cpp) [Seleccionar]

int a = (*Cola.begin()).first;


Para el segundo elemento es:
Código (cpp) [Seleccionar]

int a = (*Cola.begin()).second.first;


Podrias ayudarme por favor?
#5
Hola que tal, ando intentando un problema de un juez en linea https://omegaup.com/arena/problem/decepcion#problems

Dado un entero n, se forma una fila de n torres con alturas desde 1 hasta n centímetros, ninguna altura aparece más de una vez. Se quieren conocer todas las permutaciones de esta fila tal que viendo la fila de frente solo se vean F torres diferentes y vista por detrás solo se vean B torres. Se dice que podemos ver una torre con altura H si no hay otra torre delante de ella (con respecto a nuestra visión) con altura mayor a H.

Entrada

Tres enteros separados por espacios: n, F y B.

Salida

Un entero que representa el número de permutaciones que cumplen con las condiciones establecidas.

Ejemplo

4 2 3
3
Las tres permutaciones posibles son:
Frente → 2 4 3 1
Frente → 1 4 3 2
Frente → 3 4 2 1

Límites

1≤n,F,B≤13


En el cual tengo una respuesta que me da 55 puntos, me da tiempo limite excedido
Podrias darme una ayuda?
Por ejemplo alguna poda o mucho mejor alguna pagina donde expliquen temas de este tipo
, etc..., todo es bueno.
Bueno y pues lo que hago es literal hacer lo que pide el problema, no tengo ninguna poda
(en un principio pense que el numero mayor seria un numero fijo, si viste en el ejemplo viene:

4 2 3
3
Las tres permutaciones posibles son:
Frente → 2 4 3 1
Frente → 1 4 3 2
Frente → 3 4 2 1

pero si pongo este otro caso ya no es factible

5 3 2

unas permutaciones posibles son:

12534

13254

)
Código (cpp) [Seleccionar]

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

bool visitado[15];
string cad[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", ":",";", "<", "="};//si checas el codigo ascii despues del 9 sigue el ":" y luego el ";", etc..., es decir, que poner ":" es como poner 10, etc.

int n, x, y, C;//C = contador = permutaciones validas

bool esValido_izq(string tmp){
   int a = 1, mayor = tmp[0];
   for(int i = 1; i < n; i++)
       if(tmp[i] > mayor)
           mayor = tmp[i], a++;
   return (a == x);
}

bool esValido_der(string tmp){
   reverse(tmp.begin(), tmp.end());
   int a = 1, mayor = tmp[0];
   for(int i = 1; i < n; i++)
       if(tmp[i] > mayor)
           mayor = tmp[i], a++;
   return (a == y);
}

void permutar(string tmp = ""){
if(tmp.size() == n){
       if(esValido_izq(tmp) && esValido_der(tmp)){
           C++;
           //cout<<"\n"<<tmp<<"\n"; //descomentar para ver las permutaciones validas
       }
       return;
}
for(int i = 0; i < n; i++)
if(!visitado[i]){
visitado[i] = true;
permutar(tmp + cad[i]);
visitado[i] = false;
}
}

int main(){
   cin>>n>>x>>y;
   permutar();
   cout<<C;
}
#6
Pues quiero saber que usan (arboles, hash table, etcetera) para hacerlo por mi mismo y hacer unas modificaciones.
Gracias por tu atencion. ;)
#7
Hola a todos, pues hoy me encuentro con este problema:

https://omegaup.com/arena/problem/cuanto#problems

L-¿Cuánto nos toca?

Límite de memoria   32MB
Límite de tiempo (caso)   1s   
Límite de tiempo (total)   60s

Descripción
El fin de semana pasado Karel celebró que había obtenido puntaje perfecto en su examen, por lo que hizo una fiesta para autofestejarse. En la fiesta hubo de todo, pero lo que más llamo la atención fueron unas barras de frutas con chocolate.
Al lunes siguiente, Karel planeó darle barras a sus amigos que no fueron invitados a la fiesta. Sin embargo, sus amigos estaban un poco molestos por no haber sido invitados. Como las barras de fruta no tienen la misma cantidad de chocolate , te has metido en un pequeño embrollo para compartirlas:
Para empezar, todos tienen que recibir la misma cantidad de chocolate.
Si alguno de ellos recibe mas chocolate que los demás, entonces se enojarán para siempre contigo.
Siempre puedes partir cualquier barra para darle a uno o más amigos (una parte a cada uno) o inclusive darles una barra completa.
En tu reparto, a cada uno de tus amigos sólo le puedes dar ya sea un único trozo de barra o una barra completa, ya que si alguno de ellos recibe más de un trozo o barra completa (aunque tenga la misma cantidad de chocolate que los demás amigos), también se enojarán contigo.
Para compensar el que no los hayas invitado, quieres darles la mayor cantidad de chocolate, siguiendo las restricciones de arriba, aunque implique que te quedes con barras incompletas y/o completas.
Entrada
En la primera línea habrá dos enteros NN y AA,que indican la cantidad de barras de chocolate y la cantidad de amigos a los que quiere repartir Karel.
En las siguientes NN líneas habrá un entero CiCi que indica la cantidad de chocolate que tiene la barra ii.
Salida
Un único número entero que representa la mayor cantidad de chocolate que les puedes dar a cada uno de tus amigos respetando las restricciones. Nota que es posible darles una cantidad racional de chocolate, pero como no tienes tanta precisión al partir, solo quieres darles cantidades enteras.
Ejemplo
Entrada   Salida   Descripción
2 2
2
2
2
Le das un barra a cada uno de tus amigos.
2 3
7
4
3
Como no es posible darles un pedazo que tenga 4 "unidades" de chocolate, es necesario partir ambas barras (barra [7] -> [3] [3] [1] y barra [4] -> [3] [1]) para que haya 3 pedazos con 3 "unidades" de chocolate y le das una de estas partes a cada uno de tus amigos.
Límites
1 <= NN, AA <= 100000
1 <= CiCi <= 100000

Esta es mi respuesta, la cual me da "Tiempo limite excedido"  y 46.67%:
Código (cpp) [Seleccionar]

#include<bits/stdc++.h>
using namespace std;
int main(){

   cin.tie(0);
   ios_base::sync_with_stdio(0);
   int n, amigos, aux, suma = 0, cont;
   cin>>n>>amigos;
   int ar[n];

   for(int i = 0; i < n; i++){
       cin>>ar[i];
       suma += ar[i];
   }

   int optimo = suma / amigos;

   while(optimo){

       cont = 0;
       for(int j = 0; j < n; j++)
           cont += ar[j] / optimo;

       if(cont >= amigos)
           break;
       else
           optimo--;
   }
   cout<<optimo;
   return 0;
}


Si tienes alguna otra idea a la mia, por favor mencionala, me ayudarias mucho...
#8
Dados dos nodos A y V de un grafo, quiero encontrar el camino  (el mas corto) que empiece en A y culmine en V

POR EJEMPLO :



queremos iniciar en el nodo 1 y finalizar en el nodo 3

Entrada:
Dame numero de enlaces: 6
6 4
4 3
4 5
5 1
3 2
2 5
Dame nodo raiz: 1
Dame nodo fin: 3

Salida: 1 5 4 3

Error, lo optimo es: 1, 2, 3

Lo que intente primero fue recorrer a profundidad con recursion, luego con la cola (como el recorrido es por niveles crei que el recorrido seria optimo, pero no)pero ninguno me funciona, me han comentado que puedo hacerlo con backtracking, pero aun no entiendo muy bien esa tecnica y pues si pueden ayudarme, adelante.

Mi codigo
Código (cpp) [Seleccionar]

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

vector<int>ady[MAX];
bool visitado[MAX];
int path[MAX];
int N;

//recorrido con recursion
void DFS(int u, int fin){
   path[N++] = u;
   visitado[u] = true;
   for(int v = 0; v < ady[u].size(); ++v)
       if(ady[u][v] == fin){
           path[N++] = fin;
           for(int i = 0; i < N; i++)
               cout<<path[i]<<" ";
           exit(0);
       }
       else if(!visitado[ady[u][v]])
           DFS(ady[u][v], fin);
}

//recorrido con cola
void DFS_cola(int u, int fin){
   queue<int>cola;
   cola.push(u);
   while(!cola.empty()){
       int tope = cola.front();
       visitado[tope] = true;
       path[N++] = tope;
       cola.pop();
       for(int v = 0; v < ady[tope].size(); ++v)
           if(ady[tope][v] == fin){
               path[N++] = fin;
               for(int i = 0; i < N; i++)
                   cout<<path[i]<<" ";
               exit(0);
           }
           else if(!visitado[ady[tope][v]])
               cola.push(ady[tope][v]);
   }

}

int main(){

   int n, a, b, m(0);
   cout<<"Dame numero de enlaces: ";
   cin>>n;

   for(int i = 0; i < n; i++){
       cin>>a>>b;
       ady[a].push_back(b);
       ady[b].push_back(a);
   }
   int inicial, fin;
   cout<<"Dame nodo raiz: ";
   cin>>inicial;
   cout<<"Dame nodo fin: ";
   cin>>fin;
   //DFS(inicial, fin);
   DFS_cola(inicial, fin);
   return 0;
}

#9
Hola a todos!!
Como algunos sabran estoy aprendiendo busquedas y me he topado con el siguiente problema:
LINK: https://omegaup.com/arena/problem/colosus-Laberinto#problems
O bien aqui lo escribo:

Colosus (Laberinto)

Límite de memoria   32MB
Límite de tiempo (caso)   1s
Límite de tiempo (total)   60s

Descripción

En este problema tu tomas el papel de el gran héroe Colossus tiene la misión de rescatar a la princesa omitilda de un laberinto, pero el maligno pachus quiere matar a la princesa.Lo único con lo que cuentas es con el mapa del laberinto y el tiempo en el que pachus va a llegar a la princesa, por lo que tu tienes que llegar en el menor tiempo posible a ella. El mapa consta de una cuadricula la cual tiene una 'X' en el lugar donde no puedes pasar Una 'C' donde tú te encuentras al principio, y una 'O' donde se encuentra la hermosa omitilda y una 'L' en aquellos lugares donde el campo este libre y puedas pasar.

Problema

Tu tarea consiste en escribir un programa que determine el menor tiempo en el que puedes llegar a rescatar a tu princesa tomando en cuenta que tu te mueves a una velocidad de un cuadro por seg. En caso de que no puedas llegar a salvarla escribirás en la pantalla un -1 en el caso contrario escribirás el tiempo en el que llegaste a ella. en caso de llegar al mismo tiempo considera que la princesa se salva.

Entrada

Tu programa deberá leer del teclado los siguientes datos: En la primera línea los números M, N y T separados por un espacio donde los primeros dos son las dimensiones del laberinto y T el tiempo en que pachus llegara con la princesa. Las siguientes M líneas contendrán N caracteres que representaran el mapa. Donde 3 <= M,N <=1000.

Salida

Tu programa deberá escribir un solo número que represente el tiempo en que llegaste ó -1 en caso de que no hayas llegado.

Ejemplos

Entrada   Salida
5 5 8           6
XXXXX
XCLLX
XXXLX
XOLLX
XXXXX

Consideraciones

Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo.

Lo que yo hago es usar el algoritmo de búsqueda por anchura en un grafo (BFS), desafortunadamente mi respuesta me la 80% porque da limite de memoria podrian explicarme como puedo optimizar este programa por favor?
GRACIAS.
Código (cpp) [Seleccionar]
#include<bits/stdc++.h>
using namespace std;

#define MAX 1000
char ady[MAX][MAX];
bool visitado[MAX][MAX];

struct Estado{
    int x;
    int y;
    int d;
    Estado(int x1, int y1, int d1) : x(x1), y(y1), d(d1) {}
};

int BFS(int x, int y, int h, int w){
    Estado inicial(x,y,0);
    queue<Estado>estados;
    estados.push(inicial);
    memset(visitado, false, sizeof(visitado));
    int dx[4] = {0, 0, 1, -1};
    int dy[4] = {1, -1, 0, 0};

    while(!estados.empty()){
        Estado actual = estados.front();
        estados.pop();
        if(ady[actual.x][actual.y] == 'O')
            return actual.d;
        visitado[actual.x][actual.y] = true;
        for(int i = 0; i < 4; i++){
            int nx = dx[i] + actual.x;
            int ny = dy[i] + actual.y;

            if(nx >= 0 && nx < h && ny >= 0 && ny < w && ady[nx][ny] != 'X' && !visitado[nx][ny]){
                Estado adyacente(nx, ny, actual.d + 1);
                estados.push(adyacente);
            }
        }
    }
    return -1;
}

int main(){
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int h, w, x, y, t;
    cin>>h>>w>>t;
    for(int i = 0; i < h; i++){
        for(int j = 0; j < w; j++){
            cin>>ady[i][j];
            if(ady[i][j] == 'C'){
                x = i;
                y = j;
            }
        }
    }
    cout<<BFS(x, y, h, w);
    return 0;
}

#10
Hola que tal a todos!!
llevo horas quemandome la cabeza y aun no encuetro una solucion optima para este problema, podras ayudarme? te lo agradeceria mucho.

este es el problema:
Amigos Interactivos

      Límite de memoria   128MB
               Límite de tiempo (caso)   1s   
               Límite de tiempo (total)   60s
Existe una serie de personas definidas en un espacio, dichas personas tienen la capacidad nata de comuncarse entre ellas y formar relaciones sociales, sin embargo hay relaciones muy especiales que dicen llamarce amistad, dichos individuos son conciderados amigos si realizan algun tipo de saludo especial. Una empresa de analisis de comportamiento humano te ha pedido que les ayudes a saber si un individuo A es amigo de un individuo B., un dato curioso es que si existen tres invidividuos A, C, B pertenecientes al espacio, y A es amigo de C y C amigo de B, se genera un lazo mistico mediante el cual A y B son amigos, aunque pudieren no conocerse.

Problema

Dada una descripcion de los sucesos que existen durante la estancia de N individuos en un espacio definido, responder secuencialmente a las preguntas fornuladas, de manera tal que se sepa si en algun momento un indiviuo es amigo del otro.

Entrada

Un unico numero N indicando la cantidad de Individuos

Un numero M indicando la cantidad de preguntas o sucesos que acontecen

Las siguientes M lineas contendran una letra 'P' seguida de dos enteros A y B de tal modo que se debera saber si A es amigo de B en base a los saludos que hallan sido registrados hasta el momento, en caso contrario, una letra 'S' seguida de dos numero A y B indicando que el individuo Ase ha saludado con el individuo B

Ejemplo:
Entrada   Salida
5 8  
S 1 2  
S 2 3  
P 2 4  
S 4 5  
P 5 3  
S 5 1  
P 2 4  
P 5 3
Salida

Un numero en una linea por cada pregunta dada en la entrada con un 1 si es que son amigos y un cero en caso contrario

Ejemplo:
Entrada   Salida
0  
0  
1  
1
Límites

0< N < 100,000

0<M < 100,000

por el momento lo que llevo pensado es lo siguiente:
crear un array del tamaño de los amigos donde ese array almacenara vectores.
ahora como en el ejemplo meten un saludo de las personas 1 y 2.
en el vector de la persona 1 meto el 2
en el vector de la persona 2 meto el 1
con esto se que ambos se conocen.
ahora meten un salud de las personas 2 y 3.
hago lo mismo que arriba pero si nos damos cuenta tambien deben conocerse 1 y 3 asi que debo hacer algo mas.
aqui segun yo lo complicado:
         hago un for que recorra los amigos amigos de "a" donde a cada amigo de "a"
         le agrego un amigo de "a" que no tenga (por el lazo misterioso que mencionan        en el el problema)
por ejemplo:
en este caso el amigo a es 2 que tiene de amigos 1 y 3.
recorro el 2 llego al 1 y checo es amigo de 3 ? no, entonces añadelo
ahora llego al tres y checo es amigo de 1 ? no, entonces añadelo
bueno eso es todo lo que llevo ahora el codigo, que aun no acabo mi idea por lo que les mencione arriba:
Código (cpp) [Seleccionar]
#include<bits/stdc++.h>
using namespace std;
typedef struct arrays{
   vector<int>amigos;
}persona;
int main(){    
   bool encontrado;
   char opcion;
   int individuos, preguntas, a, b;
   int i, j, k, l;
   cin>>individuos>>preguntas;
   persona ar[individuos + 1];
   for(i = 0; i < preguntas; i++){
       cin>>opcion>>a>>b;
       if(opcion == 'S'){
           ar[a].amigos.push_back(b);
           ar[b].amigos.push_back(a);
           for(j = 1; j < ar[a].amigos.size(); j++)                
               for(k = j + 1; k < ar[a].amigos.size() + 1; k++)
                   for(l = 0; l < ar[j].amigos.size(); l++)
                       
                                       
       }
       else{

       }
   }
   return 0;
}

si se les ocurre una idea mejor a la mia por favor!! avisenme!!!
#11
Hola a todos!!!
Quisiera saber si alguien tiene material de apoyo o conoce de libros  acerca de las  búsquedas (amplitud, profundidad y exhaustiva).
Lo que pasa es que si he buscado en internet y obviamente hay mucho material pero la mayoría no lo entiendo necesito algo donde se explica cada cosa paso  a paso.
Quisiera por ejemplo realizar este problema :
https://omegaup.com/arena/problem/trampas#problems
Gracias por leer.
#12
HOLA A TODOS!!
ANTES QUE NADA GRACIAS POR LEERLO.

PROBLEMA:
ME HE ATORADO EN QUE NO SE COMO DIVIDIR MI CODIGO EN FUNCIONES.

NOTA: EN EL SEGUNDO CODIGO INTENTE HACER UN MENU.

CODIGO QUE SI FUNCIONA:

Código (cpp) [Seleccionar]
#include<bits/stdc++.h>
using namespace std;

typedef struct Nodo{
   int dato;
   struct Nodo *siguiente;
}nodo;

int main(){
   cin.tie(0);
   ios_base::sync_with_stdio(0);
   system("color 0a");

   int numero_De_elementos;
   cout<<"Introduce el numero de elementos:"<<endl;
   cin>>numero_De_elementos;
   if(numero_De_elementos>0){
       int dato;
       nodo *n = NULL;
       nodo *aux = NULL;
       nodo *inicio = NULL;

       /*CREACION DE PRIMER NODO*/
       n = (nodo*)malloc(sizeof(nodo));
       cout<<"Introduce el nodo"<<endl;
       cin>>dato;
       n -> dato = dato;
       aux = n;
       inicio = n;
       n -> siguiente = NULL;

        /*CREACION DE LOS NODOS RESTANTES*/
       for(int i=1; i<numero_De_elementos; i++){
           cout<<"Introduce el nodo"<<endl;
           cin>>dato;
           n = (nodo*)malloc(sizeof(nodo));
           n -> dato = dato;
           aux -> siguiente = n;
           aux = aux -> siguiente;
           n -> siguiente = NULL;
       }

       /*RECORRIDO*/
       aux = inicio;
       while(aux != NULL){
           cout<<aux->dato<<" -> ";
           aux = aux ->siguiente;
       }
   }
return 0;
}


CODIGO CON FUNCIONES QUE NO SIRVE:
Código (cpp) [Seleccionar]
#include<bits/stdc++.h>
using namespace std;

struct Nodo{
    int dato;
    struct Nodo *siguiente;
};
typedef struct Nodo *Lista;
void primer_nodo(nodo n, nodo aux, nodo inicio)){
    int valor;
    cout<<endl<<"INTRODUCE EL VALOR DEL NODO ";
    cin>>valor;
    n = (nodo*)malloc(sizeof(nodo));
    n -> dato = valor;
    aux = n;
    inicio = n;
    n -> siguiente = NULL;
}

void agregar_nodo(nodo n, nodo aux){
    cout<<endl<<"INTRODUCE EL VALOR DEL NODO ";
    cin>>valor;
    n = (nodo*)malloc(sizeof(nodo));
    n -> dato = valor;
    aux -> siguiente = n;
    aux = n;
}

void imprimir(nodo aux, nodo inicio){
    aux = inicio;
    while(aux !=  NULL){
        cout<<aux -> dato<<" -> ";
        aux = aux -> siguiente;
    }
}

int main(){
    system("color 0a");
    int respuesta;
    int contador=0;
    nod *n =  NULL;
    nodo *aux =  NULL;
    nodo *inicio =  NULL;
    cout<<"LISTAS ENLAZADAS"<<endl<<endl;
    cout<<"0) MOSTRAR EL NUMERO DE ELEMENTOS DE LA LISTA"<<endl;
    cout<<"1) AGREGAR ELEMENTO AL FINAL"<<endl;
    cout<<"2) ELIMINAR ELEMENTO AL FINAL (AUN NO SIRVE xD)"<<endl;
    cout<<"3) MOSTAR LISTA"<<endl;
    cout<<"4) SALIR"<<endl;
    cout<<endl<<"INTRODUCE EL NUMERO DE LA OPCION DESEADA ";
    while(respuesta != 4){
        cin>>respuesta;

        if(respuesta == 0)
            cout<<contador;

        if(respuesta == 1){
            if(contador == 0)
                primer_nodo(n,aux,inicio);
            else
                agregar_nodo(n,aux);

        }
        if(respuesta == 2)

        if(respuesta == 3)
            imprimir(aux,inicio);

    }
    return 0;
}

#13
Hola a todos!
pues me encuentro con un problema donde necesito ordenar coordenadas de menor a mayor. ejemplo:
5,4
5,4
4,6
2,1
ya ordenadas:
2,1
4,6
5,4
5,4
si pudieran decirme como o alguna idea de como hacerlo se los agradeceria mucho.
;-)
#14
El problema es el siguiente:

Escribe un programa que dado un tablero de ajedrez con sus piezas, determine si alguno de los dos reyes esta en jaque.

Entrada

El tablero se representara como una matriz de 8x8 caracteres. Las letras mayusculas representan las piezas blancas, las letras minusculas representan las piezas negras. Las piezas blancas inician de la fila 1 y las piezas negras inician de la fila 8. Las piezas se representaran con las siguientes letras.

Peon - (p)
Torre - (t)
Caballo - (c)
Alfil - (a)
Reina - (e)
Rey - (r)
Espacio vacio - (.)
Lineas 1 a 8: Cada linea contiene 8 caracteres que representan las piezas o espacios vacios en esa fila.

NOTA: Los tableros que se te den como entrada no necesariamente seran tableros de un partido de ajedrez. En los tableros que se te den como entrada puede haber por ejemplo 3 caballos blancos o situaciones asi que no serian posibles en un juego real.

Salida

Linea 1: Debe contener un 1 si el rey blanco esta en jaque y un cero si no es asi.
Linea 2: Debe contener un 1 si el rey negro esta en jaque y un cero si no es asi.

Este es mi codigo:

Código (cpp) [Seleccionar]
#include<bits/stdc++.h>
using namespace std;
int main(){
   cin.tie(0);
   ios_base::sync_with_stdio(0);
   bool reynegro=false,reyblanco=false; // lo que hago aqui es declarar un booleano en falso
para si cualquier rey esta en jaque cambiarlo a true
   char ar[8][8]; // declaro el tablero
   int i,j,k,l; //como uso muchos for mejor declare las i,j,k,l
   for(i=0; i<8; i++){  // introducen las piezas
       for(j=0; j<8; j++)
           cin>>ar[i][j];
   }
/* este es la parte complicada, aqui lo que hago es un barrido de todo el tablero
si me encuentro con una torre, caballo, alfil,peon, o dama hago lo siguiente
(el rey y los puntos, es decir casillas vacias los ignoro)
otra cosa importante que decir es que como la dama es la
combinacion de torre y alfil puse en el if de cada uno "T" y "E" para reducir el codigo.
ademas una vez que veo que un rey esta en jaque hago un break
(para que seguir buscando algo que ya encontre ;-))
i=coordena x;
j=coordenada y;
si puedes notar pongo un if con las mayusculas (piezas blancas)
y si no son pues obiamente son minusculas que es lo que pongo en el else
(claro que el rey que se pone en jaque es el blanco y comparo en la R en vez de r) */
[code=cpp]    for(i=0; i<8; i++){  
       for(j=0; j<8; j++){
           if(ar[i][j]=='T' || ar[i][j]=='t' || ar[i][j]=='E' || ar[i][j]=='e'){ //tore y dama
               if(ar[i][j]=='T' || ar[i][j]=='E'){  //si es mayuscula es pieza blanca sino negra
                  for(k=i-1; k>=0; k--)//arriba
                       if(ar[k][j] == 'r')reynegro=true;
                       else if(ar[k][j] != '.')break;
                   for(k=i+1; k<8; k++)//abajo
                       if(ar[k][j] == 'r')reynegro=true;
                       else if(ar[k][j] != '.')break;
                   for(k=j-1; k>=0; k--)//izquierda
                       if(ar[i][k] == 'r')reynegro=true;
                       else if(ar[i][k] != '.')break;
                   for(k=j+1; k<8; k++)//derecha
                       if(ar[i][k] == 'r')reynegro=true;
                       else if(ar[i][k] != '.')break;
               }
               else{
                   for(k=i-1; k>=0; k--)//arriba
                       if(ar[k][j] == 'R')reyblanco=true;
                       else if(ar[k][j] != '.')break;
                   for(k=i+1; k<8; k++)//abajo
                       if(ar[k][j] == 'R')reyblanco=true;
                       else if(ar[k][j] != '.')break;
                   for(k=j-1; k>=0; k--)//izquierda
                       if(ar[i][k] == 'R')reyblanco=true;
                       else if(ar[i][k] != '.')break;
                   for(k=j+1; k<8; k++)//derecha
                       if(ar[i][k] == 'R')reyblanco=true;
                       else if(ar[i][k] != '.')break;
               }
           }
           if(ar[i][j]=='C' || ar[i][j]=='c'){ //caballo
               if(ar[i][j]=='C'){ // si es mayuscula es pieza blanca sino negra
                   if(ar[i+1][j-2]=='r' || ar[i-1][j-2]=='r' || ar[i+2][j-1]=='r' || ar[i+2][j+1]=='r'
                   || ar[i-2][j-1]=='r' || ar[i-2][j+1]=='r' || ar[i+1][j+2]=='r' || ar[i-1][j+2]=='r')
                   reynegro=true;
               }
               else{
                   if(ar[i+1][j-2]=='R' || ar[i-1][j-2]=='R' || ar[i+2][j-1]=='R' || ar[i+2][j+1]=='R'
                   || ar[i-2][j-1]=='R' || ar[i-2][j+1]=='R' || ar[i+1][j+2]=='R' || ar[i-1][j+2]=='R')
                   reyblanco=true;
               }
           }
           if(ar[i][j]=='A' || ar[i][j]=='a' || ar[i][j]=='E' || ar[i][j]=='e'){ //alfil y dama
               if(ar[i][j]=='A' || ar[i][j]=='E'){ //si es mayuscula es pieza blanca sino negra
                   for(k=i-1,l=j-1; k>=0 && l>=0; k--,l--)//izquierda, arriba
                       if(ar[k][l] == 'r')reynegro=true;
                       else if(ar[k][l] != '.')break;
                   for(k=i+1,l=j-1; k<8 && l>=0; k++,l--)//izquierda abajo
                       if(ar[k][l] == 'r')reynegro=true;
                       else if(ar[k][l] != '.')break;
                   for(k=i-1,l=j+1; k>=0 && j<8; k--,l++)//derecha, arriba
                       if(ar[k][l] == 'r')reynegro=true;
                       else if(ar[k][l] != '.')break;
                   for(k=i+1,l=j+1; k<8 && l<8; k++,l++)//derecha, abajo
                       if(ar[k][l] == 'r')reynegro=true;
                       else if(ar[k][l] != '.')break;
               }
               else{
                   for(k=i-1,l=j-1; k>=0 && l>=0; k--,l--)//izquierda, arriba
                       if(ar[k][l] == 'R')reyblanco=true;
                       else if(ar[k][l] != '.')break;
                   for(k=i+1,l=j-1; k<8 && l>=0; k++,l--)//izquierda abajo
                       if(ar[k][l] == 'R')reyblanco=true;
                       else if(ar[k][l] != '.')break;
                   for(k=i-1,l=j+1; k>=0 && j<8; k--,l++)//derecha, arriba
                       if(ar[k][l] == 'R')reyblanco=true;
                       else if(ar[k][l] != '.')break;
                   for(k=i+1,l=j+1; k<8 && l<8; k++,l++)//derecha, abajo
                       if(ar[k][l] == 'R')reyblanco=true;
                       else if(ar[k][l] != '.')break;
               }
           }
           if(ar[i][j]=='P' || ar[i][j]=='p'){ //peon
               if(ar[i][j]=='P'){//si es mayuscula es pieza blanca sino negra
                   if(ar[i+1][j-1]=='r' || ar[i+1][j+1]=='r')reynegro=true;
               }
               else{
                    if(ar[i-1][j-1]=='R' || ar[i-1][j+1]=='R')reyblanco=true;
               }
           }
       }
   }
   if(reyblanco)cout<<1; else cout<<0; // ya solo checo: si el reyblanco dio verdadero pongo que esta en jaque es decir un 1
   cout<<"\n";
   if(reynegro)cout<<1; else cout<<0;//hago lo mismo de arriba
return 0; }

[/code]
al enviar mi respuesta me da 90%
por mas que busco no encuentro mi error, podrian decirme cual es?
te lo agradeceria mucho.
[/center][/left][/pre][/right][/center][/left][/font][/left][/left][/pre][/pre][/pre]