#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;
}
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
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;
}
Suscribirse a:
Entradas (Atom)