Mostrando entradas con la etiqueta Uva Online Judge. Mostrar todas las entradas
Mostrando entradas con la etiqueta Uva Online Judge. Mostrar todas las entradas

domingo, 15 de abril de 2012

UVa - 10132 - File Fragmentation

#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;

int main()
{
    int nroCasos ;
    string linea;

    getline(cin,linea);
    nroCasos = atoi(linea.data());
    getline(cin,linea);
    while(nroCasos--)
    {
        int totalLetras = 0 ;
        vector<string> datos;
        while(getline(cin,linea) && !linea.empty())
        {
            totalLetras += linea.size();
            datos.push_back(linea);
        }
        int tamdatos = datos.size();

        int longitudSol = totalLetras/(tamdatos/2);

        //fout << "POSIBLES SOLUCIONES"<<endl;
        vector<string> solucion;
        for(int i = 0; i<tamdatos; i++)
            for(int j = i+1; j < tamdatos; j++)
                if(datos[i].size()+datos[j].size() == longitudSol)
                    solucion.push_back(datos[i]+datos[j]),solucion.push_back(datos[j]+datos[i]);

        tamdatos = solucion.size();
        int marcas[tamdatos];
        for(int i = 0; i<tamdatos; i++)
            marcas[i] = 0;
        string sol ;
        int may = -1 ;
        for(int i = 0; i<tamdatos; i++)
            if(marcas[i]==0)
            {
                for(int j = i; j < tamdatos; j++)
                    if(solucion[i].compare(solucion[j])==0)
                        marcas[j]=1, marcas[i]++;

                if(marcas[i]>may)
                    may = marcas[i],sol =  solucion[i];
            }
        cout<<sol<<endl;
        if(nroCasos!=0)
            cout<<endl;
    }
    return 0;
}

UVa - 10188 - Automated Judge Script

#include <iostream>
#include <algorithm>
#include <ctype.h>
using namespace std;
string soloNumeros(string cad)
{
    string sol = "";
    for(int i = 0; i < cad.size(); i++)
        if(isdigit(cad[i]))
            sol+=cad[i];
    return sol;
}
int main(int argc, char *argv[])
{
    int a,b;
    int nrocaso = 1;
    string linea;
    while(getline(cin,linea))
    {
        a = atoi(linea.data());
        if(a == 0)
            return 0;
        string cadsA="";
        for(int i = 0 ; i<a; i++)
        {
            getline(cin,linea);
            cadsA +=linea+'\n';
        }
        getline(cin,linea);
        b = atoi(linea.data());
        string cadsB="";
        for(int i = 0 ; i<b; i++)
        {
            getline(cin,linea);
            cadsB += linea+'\n';
        }
        cout<< "Run #"<<nrocaso<<": ";
        if(cadsA.compare(cadsB) == 0)
            cout << "Accepted"<<endl;
        else{
            string numsA,numsB;
            numsA = soloNumeros(cadsA);
            numsB = soloNumeros(cadsB);
            if(numsA.compare(numsB)==0)
                cout << "Presentation Error"<<endl;
            else
                cout<< "Wrong Answer"<<endl;
        }
        nrocaso++;
    }
    return 0;
}

UVa - 850 - Crypt Kicker II

#include <iostream>
#include <algorithm>
#include <vector>
#include <stdlib.h>
//#include <fstream>
using namespace std;
string cad = "the quick brown fox jumps over the lazy dog";
int tamcad = cad.size();
int cantespacios = 0;
vector<int> lugares[100];
int tamlug=0;
char reemplazos['z'+1];
void cargar()
{
    cantespacios = count(cad.begin(),cad.end(),' ');
    tamcad = cad.size();
    bool contado[tamcad] ;
    for(int i = 0 ; i<tamcad; i++)contado[i] = false;
    for(int i = 0 ; i<tamcad ; i++)
        if(!contado[i])
        {
            contado[i] = true;
            lugares[tamlug].push_back(i);
            for(int j = i+1 ; j<tamcad; j++)
                if(cad[j]== cad[i])
                {
                    contado[j] = true;
                    lugares[tamlug].push_back(j);
                }
            tamlug++;
        }
}
bool esEncriptado(string candidato)
{

    int tam = candidato.size();
    if(tam != tamcad)
        return false;
    if(count(candidato.begin(),candidato.end(),' ') == cantespacios)
    {
        vector<int> lugarescandid[100];
        bool contado[tamcad];
        for(int i = 0 ; i<tamcad; i++)contado[i] = false;
        int tamlugcandi=0;
        for(int i = 0 ; i<tamcad ; i++)
            if(!contado[i])
            {
                contado[i] = true;
                lugarescandid[tamlugcandi].push_back(i);
                for(int j = i+1 ; j<tamcad; j++)
                    if(candidato[j]== candidato[i])
                    {
                        contado[j] = true;
                        lugarescandid[tamlugcandi].push_back(j);
                    }
                tamlugcandi++;
            }
        if(tamlugcandi!=tamlug)
            return false;
        for(int i = 0; i<tamlug ; i++)
        {
            if(lugares[i].size()!=lugarescandid[i].size())
                return false;
            for(int j = 0; j<lugares[i].size(); j++)
                if(lugares[i][j]!=lugarescandid[i][j])
                    return false;
            for(int j = 0; j<tamcad ; j++)
                reemplazos[candidato[j]] = cad[j];
            return true;
        }
    }
    return false;
}
int main()
{
    //ifstream fin("entrada.txt");
    //ofstream fout("salida.txt");
    cargar();
    int cantcasos;
    cin>> cantcasos;
    string linea;
    getline(cin,linea);
    getline(cin,linea);
    while(cantcasos--)
    {
        vector<string> conjunto;
        while(getline(cin,linea))
            if(linea.compare("")!=0)
                conjunto.push_back(linea);
            else
                break;
        bool sw = false;
        for(int i = 0 ; i<conjunto.size(); i++)
            if(esEncriptado(conjunto[i]))
            {
                sw = true;
                break;
            }
        //cout << "tamaño del conjunto = "<< conjunto.size()<<endl;
        if(sw)
        {
            for(int i = 0 ; i<conjunto.size(); i++)
            {
                //cout << "linea a reemplazar = "<< conjunto[i]<<endl;
                for(int j = 0 ; j<conjunto[i].size(); j++)
                    cout << reemplazos[conjunto[i][j]];
                cout <<""<< endl;
            }
        }
        else
            cout << "No solution."<<endl;
        if(cantcasos!=0)
            cout <<endl;
    }
    return 0;
}

jueves, 12 de abril de 2012

UVa - 10252 - Common Permutation

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    string a,b,aux;
    int tama,tamb;
    while(getline(cin,a) && getline(cin,b))
    {
        tama = a.size();
        tamb = b.size();
        sort(a.begin(),a.end());
        sort(b.begin(),b.end());
        string sol = "";
        int i ,j = 0;
        for(i = 0; i<tama && j<tamb; i++)
            while(j<tamb && a[i]>=b[j])
            {
                if(b[j]==a[i])
                {
                    sol += a[i];
                    j++;
                    break;
                }
                j++;
            }
        cout << sol<<endl;
    }
    return 0;
}

UVa - 10010 Where's Waldorf?

#include <iostream>

using namespace std;
int m,n;
string abuscar;
int tamcad;
bool buscarH(int f,int c, string mapa[])
{
    //derecha
    int fin = c+tamcad-1;
    if(fin<n)
    {
        int i,j;
        for(i = c,j=0 ; i<=fin ; i++,j++)
            if(abuscar[j]!=mapa[f][i])
                break;
        if(i-1 == fin)
            return true;
    }
    //izquierda
    fin = c-tamcad+1;
    if(fin>=0)
    {
        int i,j;
        for(i = c,j=0 ; i>=fin ; i--,j++)
            if(abuscar[j]!=mapa[f][i])
                break;
        if(i+1 == fin)
            return true;
    }
    return false;
}
bool buscarV(int f,int c, string mapa[])
{
    //abajo
    int fin = f+tamcad-1;
    if(fin<m)
    {
        int i,j;
        for(i = f,j=0 ; i<=fin ; i++,j++)
            if(abuscar[j]!=mapa[i][c])
                break;
        if(i-1 == fin)
            return true;
    }
    //arriba
    fin = f-tamcad+1;
    if(fin>=0)
    {
        int i,j;
        for(i = f,j=0 ; i>=fin ; i--,j++)
            if(abuscar[j]!=mapa[i][c])
                break;
        if(i+1 == fin)
            return true;
    }
    return false;
}
bool buscarS(int f,int c, string mapa[])
{
    //derecha y arriba
    int finh = c+tamcad-1;
    int finv = f-tamcad+1;
    if(finh<n && finv>=0 )
    {
        int i,j,k;
        for(i = c,k = f,j=0 ; i<=finh && k>=finv ; i++,j++,k--)
            if(abuscar[j]!=mapa[k][i])
                break;
        if(i-1 == finh && k+1==finv)
            return true;
    }
    //izquierda y abajo
    finh = c-tamcad+1;
    finv = f+tamcad-1;
    if(finh>=0 && finv<m)
    {
        int i,j,k;
        for(i = c,j=0, k=f ; i>=finh  && k<=finv; i--,j++,k++)
            if(abuscar[j]!=mapa[k][i])
                break;
        if(i+1 == finh && k-1==finv)
            return true;
    }
    return false;
}
bool buscarB(int f,int c, string mapa[])
{
    //derecha y abajo
    int finh = c+tamcad-1;
    int finv = f+tamcad-1;
    if(finh<n && finv<m)
    {
        int i,j,k;
        for(i = c,j=0,k=f ; i<=finh & k<=finv; i++,j++,k++)
            if(abuscar[j]!=mapa[k][i])
                break;
        if(i-1 == finh && k-1==finv)
            return true;
    }
 
    //izquierda y arriba
    finh = c-tamcad+1;
    finv = f-tamcad+1;
    if(finh>=0 && finv>=0)
    {
        int i,j,k;
        for(i = c,j=0,k=f ; i>=finh && k>=finv ; i--,j++,k--)
            if(abuscar[j]!=mapa[k][i])
                break;
        if(i+1 == finh && k+1==finv)
            return true;
    }
 
    return false;
}
void buscar(string mapa[])
{
    int i,j;
 
    for(i=0; i < m; i++)
        for(j = 0; j < n; j++)
            if(buscarH(i,j,mapa) || buscarV(i,j,mapa) || buscarS(i,j,mapa) || buscarB(i,j,mapa))
            {
                cout << i+1<<" "<<j+1<<endl;
                return;
            }
}
int main()
{
    int casos,i,j,cb;
    cin>>casos;
    while(casos--)
    {
        cin >> m>>n;
        string mapa[m];
        for(i = 0; i<m; i++)
            cin>>mapa[i];
        for(i=0; i < m; i++)
            for(j = 0; j < n; j++)
                mapa[i][j] &= 95;
        cin>>cb;
        while(cb--)
        {
            cin>>abuscar;
            tamcad = abuscar.size();
            for(i=0; i < tamcad; i++)
                abuscar[i] &= 95;
            buscar(mapa);
        }
        if(casos>0)
            cout << endl;
    }
    return 0;
}