#include#include #include #include #include using namespace std; int main() { int ca1,ca2,ca3,extra,ele; scanf("%d%d%d",&ca1,&ca2,&ca3); while(ca1+ca2+ca3 != 0) { int sw =0; if (ca1 == ca2) { ele = ca1; sw = 1 ; if(ca2==ca3) { ele = max(ele,ca3); sw =2; } else extra = ca3; } else { if (ca2 == ca3) { ele = ca3; sw =1; extra = ca1; } else { if(ca1 == ca3) { ele = ca1; sw = 1; extra = ca2; } } } if (sw == 0) cout << "1 1 2" << endl; else { if (sw==2) { if (ele == 13) cout << "*" << endl; else { ele++; cout << ele << " "<< ele << " "<< ele<< endl; } } else { if ( ele == 13) { if(extra == 13) cout << "*" < ele) cout << "1 1 1"<
NZEC-TEAM
Resolver ejercicios para llegar al Mundial de ACM :D
jueves, 7 de junio de 2012
king's poker ( me acepto pero .......... )
martes, 29 de mayo de 2012
Problema E
Aqui les muestro una solucion de problema E del concurso, nostros no perdonamos
#include#include using namespace std; int main() { int n,pos,i; scanf("%d",&n); while(n!=0) { int pos[10001]={0}; int num[10001]={0}; for ( i = 1 ; i <= n ; i ++) scanf("%ld%ld",&num[i],&pos[i]); int c = 0; int p; for ( i = 1 ; i <= n ; i ++) { p = i+pos[i]; if(p>n || p <1) c=c+1; else { if(pos[i] != 0) { c = c +pos[i]; c = c+ pos[i+pos[i]]; } } } if (c == 0) { for ( i = 1 ; i <= n ; i ++) { if(pos[i]==0) g[i]=num[i]; if(pos[i]>0) g[i+pos[i]]=num[i]; if(pos[i]<0) g[i+pos[i]]=num[i]; } for ( i = 1 ; i <= n ; i ++) { if(i==n) printf("%ld",g[i]); else printf("%ld ",g[i]); } printf("\n"); } else { printf("-1\n"); } scanf("%d",&n); } return 0; }
sábado, 28 de abril de 2012
Coj - 1259
bueno al fin se me ocurrio la solucion de este problema
#include#include #include using namespace std; int main() { int n; cin >> n; int v[]={1,3,9,27,81,43,29,87,61,83,49,47,41,23,69,7,21,63,89,67}; for(int i =0;i > num; int c = 0; int indice = 0; for (int j = num.size ()-1; j >= 0;j--) { c = c + v[indice]*((int)num[j]-48); indice ++; if(indice==19) indice =0; } if ( c % 4 ==0) cout << "YES"<< endl; else cout <<"NO" << endl; } }
miércoles, 25 de abril de 2012
TSHOW2
Luego de investigar como loco Sucesión de Fibonacci encontre en esta parte algo muy interesante Propiedades de la sucesión
El último dígito de cada número se repite periódicamente cada 60 números. Los dos últimos, cada 300; a partir de ahí, se repiten cada números.
#include <iostream> using namespace std; int main(){ long long int vec[63]; long long int vec2[63]; vec[1]=0; vec[2]=1; vec[3]=1; vec[4]=2; vec[5]=3; vec[6]=5; vec[7]=8; vec2[1]=0; vec2[2]=1; vec2[3]=1; vec2[4]=2; vec2[5]=3; vec2[6]=5; vec2[7]=8; for(int i=8; i<61; i++) { vec[i]=vec[i-2]+vec[i-1]; vec2[i]=vec[i]%10; } long long int aux=1,aux2=1; int n; cin>>n; while(n--){ cin>>aux; if(aux<7) { cout<<vec2[aux]<<endl; } else { aux2=aux%60; if(aux2==0) cout<<1<<endl; else cout<<vec2[aux2]<<endl; } } return 0; }
Moraleja revisar las propiedades, si hubiera hecho antes eso me hubiera ahorrado mucho tiempo :xD.
Publicado por
starsaminf
en
12:08
0
comentarios
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas:
SPOJ
jueves, 19 de abril de 2012
Burrito Amarrado
Problema B Burrito amarrado Entrada: burrito.in Salida: estándar. Máxima memoria: 32 MB Tiempo límite: 10 segundos Descripción Un burro se encuentra en un corral circular de radio R amarrado con una cuerda mágica a un poste situado en el centro del corral. Inicialmente el burro se encuentra junto al poste y comienza a caminar hacia el norte. La cuerda se pone tensa cuando el burro llega a la mitad del camino entre el poste y el corral. En ese momento el burro da vuelta 90º a la derecha y sigue caminando. De nuevo, la cuerda mágica únicamente le permite llegar hasta la mitad del camino entre el punto donde dio vuelta y el corral. Como el burro quiere escapar, continúa caminando de esta manera hasta que por n-ésima vez la cuerda lo obliga a detenerse. Tu trabajo es determinar la distancia entre el burro y el poste en ese momento. Entrada Cada caso de entrada consiste de una línea que contiene dos enteros R y n separados por un espacio (1 ≤ R, n ≤ 10000). La última línea de la entrada contiene dos ceros, ese caso no debe procesarse. Salida Para cada caso de entrada, imprime una línea que contenga la distancia entre el burro y el poste con 2 decimales de precisión. Ejemplo de entrada 120 1 120 4 0 0 Ejemplo de salida 60.00 40.69 Solucion Bueno en este problema se soluciona teniendo en cuenta que habran cuatro casos ya que gira en 0, 90 , 180 , 270 grados. El valor de X y de Y se altera sumando o restan la distancia del punto actual al corral de esta manera y = (y + sqrt(r*r-x*x))/2; x = (x + sqrt(r*r-y*y))/2; y = (y - sqrt(r*r-x*x))/2; x = (x - sqrt(r*r-y*y))/2; de acuerdo a los cuatro casos y a los signos en ellos. finalmente se usa el teorema de pitagoras para mostrar la hipotenusa. #include#include #include using namespace std; int main() { int r; int n; cin >> r; cin >> n; while(r+n!=0 ) { double x=0.0; double y=0.0; while(n--) { if (n%4==1) y = (y + sqrt(r*r-x*x))/2; if (n%4==2) x = (x + sqrt(r*r-y*y))/2; if (n%4==3) y = (y - sqrt(r*r-x*x))/2; if (n%4==0) x = (x - sqrt(r*r-y*y))/2; } cout.precision(2); cout << fixed << sqrt(x*x+y*y) < > r; cin >> n; } }
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; }
Suscribirse a:
Entradas (Atom)