#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define db(a) cout << #a << " = " << a << endl
#define db2(a, b) cout << #a << " = " << a << " = " << #b << " = " << b << endl
using namespace std;
int vis[26], mapa[26][26], top;
void buscar(int i) {
if (!vis[i]) {
vis[i] = 1;
for (int j = 0; j <= top; j++) {
if (mapa[i][j]) {
mapa[i][j] = 0;
mapa[j][i] = 0;
buscar(j);
}
}
}
}
int main() {
int cases, res;
char linea[3];
scanf("%d\n\n", &cases);
for (int k = 0; k < cases; k++) {
memset(mapa, 0, sizeof mapa);
memset(vis, 0, sizeof vis);
res = 0;
while(gets(linea) && linea[0]) {
if (!linea[1])
top = linea[0] - 'A';
else
mapa[linea[0] - 'A'][linea[1] - 'A'] = mapa[linea[1] - 'A'][linea[0] - 'A'] = 1;
}
for (int i = 0; i <= top; i++)
if (!vis[i]) buscar(i), res++;
printf("%d\n", res);
if (k + 1 != cases) printf("\n");
}
return 0;
}
jueves, 27 de octubre de 2011
459 - Graph Connectivity, uva
10928 - My Dear Neighbours, uva
#include<iostream>
#include<sstream>
#define db(a) cout << #a << " = " << a << endl
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
int casos, v[1001];
int lugares, val;
stringstream ss;
string linea;
cin >> casos;
int min;
getline(cin, linea);
while (casos--) {
cin >> lugares;
getline(cin, linea);
min = 0x7fffffff;
for (int i = 1; i <= lugares; i++) {
ss.clear();
getline(cin, linea);
ss << linea;
v[i] = 0;
while (ss >> val)
v[i]++;
if (min > v[i]) min = v[i];
}
bool first = true;
for (int i = 1; i <= lugares; i++) {
if (min == v[i])
if (first) {
cout << i;
first = false;
}
else
cout << " " << i;
}
cout << endl;
}
return 0;
}
291 - The House Of Santa Claus, uva
#include<iostream>
#include<cstdio>
#include<cstring>
#define db(a) cout << #a << " = " << a << endl
using namespace std;
int matriz[6][6];
int prev12[] = {1, 2, 3, 5};
int prev35[] = {1, 2, 3, 4, 5};
int prev4[]= {3, 5};
void buscar(int res,int deep) {
if(deep == 8) {
//printf("%d %d\n",cont++, res);
printf("%d\n", res);
}
else {
int prev = res % 10;
if (prev == 1 || prev == 2) {
for (int i = 0; i < 4; i++) {
if (!matriz[prev][prev12[i]]) {
matriz[prev][prev12[i]] = 1;
matriz[prev12[i]][prev] = 1;
/*db(prev);
db2(res * 10 + prev12[i], deep + 1);*/
buscar(res * 10 + prev12[i], deep + 1);
matriz[prev][prev12[i]] = 0;
matriz[prev12[i]][prev] = 0;
}
}
}
else {
if (prev == 3 || prev == 5) {
for (int i = 0; i < 5; i++) {
if (!matriz[prev][prev35[i]]) {
matriz[prev][prev35[i]] = 1;
matriz[prev35[i]][prev] = 1;
/*db(prev);
db2(res * 10 + prev35[i], deep + 1);*/
buscar(res * 10 + prev35[i], deep + 1);
matriz[prev][prev35[i]] = 0;
matriz[prev35[i]][prev] = 0;
}
}
}
else {
for (int i = 0; i < 2; i++) {
if (!matriz[prev][prev4[i]]) {
matriz[prev][prev4[i]] = 1;
matriz[prev4[i]][prev] = 1;
/*db(prev);
db2(res * 10 + prev4[i], deep + 1);*/
buscar(res * 10 + prev4[i], deep + 1);
matriz[prev][prev4[i]] = 0;
matriz[prev4[i]][prev] = 0;
}
}
}
}
}
}
int main() {
memset(matriz, 0, sizeof matriz);
for (int i = 0; i < 6; i++) matriz[i][i] = 1;
buscar(1, 0);
return 0;
}
miércoles, 26 de octubre de 2011
11136 - Hoax or what, uva
#include<cstdio>
#include<set>
using namespace std;
int main() {
int n, k, val, i, num;
long long res;
multiset::iterator it;
multiset s;
while (scanf("%d", &n)) {
if (n == 0) break;
s.clear();
res = 0;
for (num = 0; num < n; num++) {
scanf("%d", &k);
for (i = 0; i < k; i++) {
scanf("%d", &val);
s.insert(val);
}
it = s.end();
it--;
res += *it - *s.begin();
s.erase(it);
s.erase(s.begin());
}
printf("%lld\n", res);
}
return 0;
}
martes, 25 de octubre de 2011
11308 - Bankrupt Baker, uva
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<algorithm>
#include<utility>
#include<map>
#include<set>
#define foreach(it, l) for (typeof(l.begin()) it = l.begin(); it != l.end(); it++)
#define db(a) cout << #a << " = " << a << endl
using namespace std;
int main() {
int t, m, n, b, price, cant, units;
char linea[60];
scanf("%d\n", &t);
for (int i = 0; i < t; i++) {
map mapa_price;
pair receta;
set< pair > lista;
gets(linea);
int len = strlen(linea);
transform(linea, linea + len, linea, ::toupper);
printf("%s\n", linea);
scanf("%d%d%d\n", &m , &n, &b);
for (int r = 0; r < m; r++) {
scanf("%s %d\n", linea, &price);
mapa_price[linea] = price;
}
for (int q = 0; q < n; q++) {
gets(linea);
receta.second = linea;
receta.first = 0;
gets(linea);
cant = atoi(linea);
units = 0;
for (int r = 0; r < cant; r++) {
scanf("%s %d\n", linea, &units);
receta.first += mapa_price[linea] * units;
}
lista.insert(receta);
}
cant = 0;
foreach(it, lista) {
if (it->first <= b) {
printf("%s\n", it->second.c_str());
cant++;
}
}
if(cant == 0)
printf("Too expensive!\n");
printf("\n");
}
return 0;
}
10226 - Hardwood Species, uva
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<cstdlib>
#define foreach(it, l) for (typeof(l.begin()) it = l.begin(); it != l.end(); it++)
#define db(a) cout << #a << " = " << a << endl
using namespace std;
int main() {
char linea[30];
void *p;
gets(linea);
int test = atoi(linea), total;
gets(linea);
for (int i = 0; i < test; i++) {
if (i != 0) printf("\n");
map mapa;
while (1) {
p = gets(linea);
if(p == NULL || linea[0] == '\0') break;
if (strcmp(linea, "") == 0) break;
mapa[linea]++;
}
total = 0;
foreach(it, mapa) {
total += it->second;
}
foreach(it, mapa) {
printf("%s %.4f\n", it->first.c_str(), ( (double)it->second * 100 )/ total);
}
}
return 0;
}
11034 - Ferry Loading IV, uva
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define db(a) cout << #a << " = " << a << endl;
#define foreach(it,l) for (typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
int main() {
int c, l, m, val, cap = 0, cont = 0;
char direccion[20];
scanf("%d", &c);
for (int k = 0; k < c; k++) {
queue left, right;
scanf("%d %d", &l, &m);
l *= 100;
for (int i = 0; i < m; i++) {
scanf("%d %s", &val, direccion);
if(strcmp(direccion,"left") == 0)
left.push(val);
else
right.push(val);
}
cont = cap = 0;
string ini = "left";
while (!left.empty() || !right.empty()) {
if (ini == "left") {
cap = 0;
while (!left.empty() && cap + left.front() <= l) {
//printf("left %d\n", time + t);
cap += left.front();
left.pop();
}
ini = "right";
cont++;
}
else {
cap = 0;
while (!right.empty() && cap + right.front() <= l) {
//printf("right %d\n", time + t);
cap += right.front();
right.pop();
}
ini = "left";
cont++;
}
}
printf("%d\n", cont);
}
return 0;
}
725 - Division, uva
#include <iostream>
#include <cstring>
#include <cstdio>
#include <ctime>
/*#define db(a) cout << #a << " = " << a << endl
#define db2(a, b) cout << #a << " = " << a << " "<< #b << " = " << b << endl
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)*/
using namespace std;
bool digits[10];
int last;
bool valid(int numerador, int denominador) {
if (numerador > 99999) return false;
memset(digits, true, sizeof digits);
if (numerador / 10000 == 0) digits[0] = false;
while (numerador > 0) {
last = numerador % 10;
if (digits[last]) digits[last] = false;
else return false;
numerador /= 10;
}
if (denominador / 10000 == 0)
if (digits[0]) digits[0] = false;
else return false;
while (denominador > 0) {
last = denominador % 10;
if (digits[last]) digits[last] = false;
else return false;
denominador /= 10;
}
return true;
}
int main() {
int N, num;
bool ok;
//clock_t now = clock();
scanf("%d", &N);
if (N != 0) {
while (true) {
ok = false;
for (int f = 0; f < 10; f++) {
num = f;
for (int g = 0; g < 10; g++) {
if (g == f) continue;
num = num * 10 + g;
for (int h = 0; h < 10; h++) {
if (h == g || h == f) continue;
num = num * 10 + h;
for (int i = 0; i < 10; i++) {
if (i == h || i == g || i == f) continue;
num = num * 10 + i;
for (int j = 0; j < 10; j++) {
if (j == i || j == h || j == g || j == f) continue;
num = num * 10 + j;
//db(num);
int numerator = num * N;
if (valid(numerator, num)) {
ok = true;
//db(numerator % num);
if (numerator / 10000 == 0) {
if (num / 10000 == 0) {
//db2(num, num / 10000);
printf("0%d / 0%d = %d\n", numerator, num, N);
} else
printf("0%d / %d = %d\n", numerator, num, N);
} else {
if (num / 10000 == 0) {
//db2(num,num / 10000);
printf("%d / 0%d = %d\n", numerator, num, N);
} else
printf("%d / %d = %d\n", numerator, num, N);
}
}
num -= j;
num /= 10;
}
num -= i;
num /= 10;
}
num -= h;
num /= 10;
}
num -= g;
num /= 10;
}
}
int temp = N;
scanf("%d", &N);
if (!ok)
if(N != 0)
printf("There are no solutions for %d.\n\n", temp);
else
printf("There are no solutions for %d.\n", temp);
else printf("\n");
if(N == 0) break;
}
}
//printf("el tiempo para todo fue: %.3fs", (clock() - now) * 1.0 / (CLOCKS_PER_SEC) );
return 0;
}
lunes, 24 de octubre de 2011
101 - The Blocks Problem, uva
#include <algorithm> #include <iostream> #include <cstring> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <cctype> #include <cmath> #include <numeric> #define escribir(a) cout << #a << "=" << a << endl; using namespace std; int block[25]; stacks[25], tmp; void move_onto(int a, int b); void move_over(int a, int b); void pile_onto(int a, int b); void pile_over(int a, int b); int main() { int n, a, b; char ar_1[10], ar_2[10]; while (cin >> n) { for (int i = 0; i < n; i++) { s[i].push(i); block[i] = i; } while (cin >> ar_1) { if (ar_1[0] == 'q') break; cin >> a >> ar_2 >> b; if (a != b && block[a] != block[b]) { if (ar_1[0] == 'm') { if (ar_2[1] == 'n') { move_onto(a, b); } else move_over(a, b); } else { if (ar_2[1] == 'n') { pile_onto(a, b); } else { pile_over(a, b); } } } } for (int i = 0; i < n; i++) { cout << i << ":"; if (s[i].empty()) cout << endl; else { while (!s[i].empty()) { tmp.push(s[i].top()); s[i].pop(); } while (!tmp.empty()) { cout << " " << tmp.top(); tmp.pop(); } cout << endl; } } } return 0; } void move_onto(int a, int b) { while (s[block[a]].top() != a) { int t = s[block[a]].top(); s[t].push(t); block[t] = t; s[block[a]].pop(); } while (s[block[b]].top() != b) { int t = s[block[b]].top(); s[t].push(t); block[t] = t; s[block[b]].pop(); } s[block[b]].pop(); block[b] = b; s[b].push(b); s[b].push(s[block[a]].top()); s[block[a]].pop(); block[a] = b; } void move_over(int a, int b) { while (s[block[a]].top() != a) { int t = s[block[a]].top(); s[t].push(t); block[t] = t; s[block[a]].pop(); } s[block[b]].push(s[block[a]].top()); s[block[a]].pop(); block[a] = block[b]; } void pile_onto(int a, int b) { while (s[block[b]].top() != b) { int t = s[block[b]].top(); s[t].push(t); block[t] = t; s[block[b]].pop(); } s[block[b]].pop(); block[b] = b; s[b].push(b); while (s[block[a]].top() != a) { tmp.push(s[block[a]].top()); s[block[a]].pop(); } tmp.push(s[block[a]].top()); s[block[a]].pop(); while (!tmp.empty()) { s[block[b]].push(tmp.top()); block[tmp.top()] = block[b]; tmp.pop(); } } void pile_over(int a, int b) { while (s[block[a]].top() != a) { tmp.push(s[block[a]].top()); s[block[a]].pop(); } tmp.push(s[block[a]].top()); s[block[a]].pop(); while (!tmp.empty()) { s[block[b]].push(tmp.top()); block[tmp.top()] = block[b]; tmp.pop(); } }
105 - The Skyline Problem, uva
#include<iostream>
#include<vector>
#include<deque>
#include<cstring>
using namespace std;
int H[10000];
int main() {
int min = 10000;
int max = 0;
int x, y, h;
memset(H, 0, sizeof (H));
while (cin >> x >> h >> y) {
if (x < min)
min = x;
if (y > max)
max = y;
for (int i = x; i < y; i++) {
if (H[i] < h)
H[i] = h;
}
}
int cambio = H[min];
cout << min << " " << cambio;
for (int i = min + 1; i <= max; i++) {
if(cambio != H[i])
{
cambio = H[i];
cout << " "<< i << " " << cambio;
}
}
cout << endl;
return 0;
}
10010 - Where's Waldorf?, uva
#include<iostream>
#include<cstdio>
#include<cctype>
#include<cmath>
#include<vector>
#include<map>
#include<utility>
#include<algorithm>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl;
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
char matriz[50][50];
int main() {
int t, m, n, k;
scanf("%d\n", &t);
map > mapa;
for(int r = 0; r < t; r++){
if(r != 0) printf("\n");
mapa.clear();
scanf("%d %d\n", &m, &n);
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
scanf("%c", &matriz[i][j]);
matriz[i][j] = tolower(matriz[i][j]);
}
getchar();
}
scanf("%d", &k);
vector words(k);
vector found(k, false);
for (int i = 0; i < k; i++) {
cin >> words[i];
transform(words[i].begin(), words[i].end(), words[i].begin(), ::tolower);
}
getchar();
//solution
bool ok = false;
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
for(int v = 0; v < k; v++){
if(found[v]) continue;
int tam = words[v].size();
ok = false;
for(int x = -1; x <= 1 && !ok; x++){
for(int y = -1; y <= 1 && !ok; y++){
if(x == 0 && y == 0 && tam != 1) continue;
if(i + tam * x >= -1 && i + tam * x <= m)
if(j + tam * y >= -1 && j + tam * y <= n){
ok = true;
for(int s = 0; s < tam & ok; s++){
if(words[v][s] != matriz[i + s * x][j + s * y]) ok = false;
}
if(ok) found[v] = true;
if(ok) mapa[words[v]].first = i + 1, mapa[words[v]].second = j + 1;
}
}
}
}
}
}
for(int i = 0; i < words.size(); i++){
if(mapa[words[i]].first != 0)
printf("%d %d\n", mapa[words[i]].first, mapa[words[i]].second);
}
}
return 0;
}
299 - Train Swapping, uva
#include<iostream>
#include<sstream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int main(){
int t, n;
scanf("%d", &t);
for(int k = 0; k < t; k++){
scanf("%d", &n);
vector lista(n);
for(int r = 0; r < n; r++){
scanf("%d", &lista[r]);
}
int res = 0;
for(int i = n; i > 1; i--)
for(int j = 0; j + 1 < i; j++){
if(lista[j] > lista[j + 1]) {
swap(lista[j], lista[j + 1]);
res++;
}
}
printf("Optimal train swapping takes %d swaps.\n", res);
}
return 0;
}
673 - Parentheses Balance, uva
#include<iostream>
#include<sstream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int main(){
int t;
scanf("%d\n", &t);
string cadena;
for(int i = 0; i < t; i++){
stack pila;
getline(cin, cadena);
if(cadena.size() == 0) {
printf("Yes\n");
continue;
}
int len = cadena.size();
int k = 0;
for(; k < len; k++){
if(cadena[k] == '(' || cadena[k] == '[')
pila.push(cadena[k]);
else
if(!pila.empty() && ((pila.top() == '[' && cadena[k] == ']' )||
(pila.top() == '(' && cadena[k] == ')'))) pila.pop();
else break;
}
if(pila.empty() && k == len) printf("Yes\n");
else printf("No\n");
}
return 0;
}
One Little, Two Little, Three Little Endians , uva
#include<iostream>
#include<bitset>
#include<cstdio>
#include<vector>
#include<cmath>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
string complemento2(string cad){
for(int i = 0; i < 32; i++)
cad[i] = cad[i] == '1' ? '0' : '1';
bool carry = true;
for(int i = 31; i >= 0 && carry; i--){
if(cad[i] == '0') {
if(carry)
cad[i] = '1', carry = false;
}
else
if(carry) cad[i] = '0';
}
return cad;
}
int to_int(string cad){
int factor = 1;
if(cad[0] == '1')
cad = complemento2(cad), factor *= -1;
int num = 0;
for(int i = 0; i < 32; i++){
if(cad[i] == '1')
num += pow(2., 31 - i);
}
return factor * num;
}
int main(){
int n;
while(scanf("%d", &n) != EOF){
bitset<32> bit_set = n;
string num_b = bit_set.to_string();
string concat = "", res = "";
for(int i = 1; i <= 32; i++)
if (i % 8 != 0) concat += num_b[i - 1];
else concat += num_b[i - 1], res = concat + res, concat = "";
int rpta = to_int(res);
printf("%d converts to %d\n", n, rpta);
}
return 0;
}
Etiquetas:
One Little,
Three Little Endians,
Two Little,
uva
Problem A: Football (aka Soccer) , uva
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<map>
#include<cctype>
#include<cmath>
#include<vector>
#include<algorithm>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl;
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
struct team{
string name;
int total_points;
int games_played;
int wins;
int ties;
int losses;
int goal_scored;
int goal_against;
};
bool cmp(team a, team b){
if (a.total_points > b.total_points)
return true;
else {
if (a.total_points == b.total_points){
if(a.wins > b.wins)
return true;
else {
if (a.wins == b.wins) {
if ((a.goal_scored - a.goal_against) > (b.goal_scored - b.goal_against))
return true;
else {
if ((a.goal_scored - a.goal_against) == (b.goal_scored - b.goal_against)) {
if (a.goal_scored > b.goal_scored)
return true;
else {
if (a.goal_scored == b.goal_scored) {
if (a.games_played < b.games_played)
return true;
else {
if (a.games_played == b.games_played) {
if (strcasecmp(a.name.c_str(), b.name.c_str()) <= 0)
return true;
else
return false;
}
else
return false;
}
}
else
return false;
}
}
else
return false;
}
}
else {
return false;
}
}
}
else {
return false;
}
}
}
int main(){
int N, T, G, ptosA, ptosB;
string teamA, teamB;
string tournament;
string linea;
scanf("%d\n", &N);
for (int cases = 0; cases < N; cases++) {
if(cases != 0) printf("\n");
getline(cin , tournament, '\n');
scanf("%d\n", &T);
team equipos[T];
for (int i = 0; i < T; i++) {
getline(cin, equipos[i].name, '\n');
//db(equipos[i].name);
equipos[i].total_points = 0;equipos[i].games_played = 0;
equipos[i].wins = 0;equipos[i].ties = 0;equipos[i].losses = 0;
equipos[i].goal_scored = 0;equipos[i].goal_against = 0;
}
scanf("%d\n", &G);
for (int i = 0; i < G; i++) {
getline(cin, linea , '\n');
//db(linea);
char *st, *buf, sep[] = "#@";
buf = strdup(linea.c_str());
st = strtok(buf, sep);
teamA = st;
st = strtok(0, sep);
ptosA = atoi(st);
st = strtok(0, sep);
ptosB = atoi(st);
st = strtok(0, sep);
teamB = st;
/*db2(teamA, ptosA);
db2(teamB, ptosB);*/
for (int k = 0; k < T; k++){
if(equipos[k].name == teamA){
if(ptosA > ptosB) equipos[k].wins++, equipos[k].total_points += 3;
if(ptosA == ptosB) equipos[k].ties++, equipos[k].total_points++;
if(ptosA < ptosB) equipos[k].losses++;
equipos[k].games_played++;
equipos[k].goal_scored += ptosA;
equipos[k].goal_against += ptosB;
}
if(equipos[k].name == teamB){
if(ptosB > ptosA) equipos[k].wins++, equipos[k].total_points += 3;
if(ptosB == ptosA) equipos[k].ties++, equipos[k].total_points++;
if(ptosB < ptosA) equipos[k].losses++;
equipos[k].games_played++;
equipos[k].goal_scored += ptosB;
equipos[k].goal_against += ptosA;
}
}
}
sort(equipos, equipos + T, cmp);
printf("%s\n", tournament.c_str());
for (int k = 0; k < T; k++) {
printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n", k + 1, equipos[k].name.c_str(), equipos[k].total_points, equipos[k].games_played, equipos[k].wins, equipos[k].ties, equipos[k].losses, (equipos[k].goal_scored - equipos[k].goal_against), equipos[k].goal_scored, equipos[k].goal_against);
}
}
}
612 - DNA Sorting, uva
// topcoder.cpp: define el punto de entrada de la aplicación de consola.
//
//#include "stdafx.h"
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cstdlib>
#include<algorithm>
#include<utility>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
bool cmp(const pair<int, string>& a,const pair<int, string>& b) {
return a.first < b.first;
}
int val(const char* a) {
int len = strlen(a), cont = 0;
for (int i = 0; i < len; i++)
for (int j = i + 1; j < len; j++)
if(a[i] > a[j]) cont++;
return cont;
}
int main() {
/*freopen("in.in", "r", stdin);
freopen("ou.out", "w", stdout);*/
char linea[1000];
int test, n, m;
bool first = true;
gets(linea);
test = atoi(linea);
gets(linea);
while (test--) {
gets(linea);
sscanf(linea, "%d %d", &n, &m);
vector<pair <int, string> > lista(m);
for (int i = 0; i < m; i++) {
gets(linea);
lista[i] = make_pair(val(linea), linea);
}
gets(linea);
stable_sort(lista.begin(), lista.end(), cmp);
if(!first) printf("\n");
first = false;
for (int i = 0; i < m; i++) {
printf("%s\n", lista[i].second.c_str());
}
}
return 0;
}
10258 - Contest Scoreboard, uva
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define foreach(it, l) for (typeof(l.begin()) it = l.begin(); it != l.end(); it++)
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl;
using namespace std;
struct team {
int id, solved[11], penalty[11];
bool submit;
friend bool operator<(const team& a, const team& b) {
if(a.solved[10] > b.solved[10]) return true;
if(a.solved[10] == b.solved[10] && a.penalty[10] < b.penalty[10]) return true;
if(a.solved[10] == b.solved[10] && a.penalty[10] == b.penalty[10] && a.id < b.id) return true;
return false;
}
};
team equipos[101];
void reset() {
for (int i = 0; i < 101; i++) {
equipos[i].id = i;
memset(equipos[i].solved, 0, sizeof equipos[i].solved);
memset(equipos[i].penalty, 0, sizeof equipos[i].penalty);
equipos[i].submit = false;
}
}
void calcular(void) {
for (int i = 1; i < 101; i++) {
if(!equipos[i].submit) continue;
for (int x = 1; x < 10; x++) {
{
if(equipos[i].solved[x]) {
equipos[i].solved[10] ++;
equipos[i].penalty[10] += equipos[i].penalty[x];
}
}
}
}
}
int main() {
int test, contestant, problem, time;
char l;
bool first = true;
string linea;
getline(cin, linea);
test = atoi(linea.c_str());
getline(cin, linea);
while (test--) {
reset();
while (getline(cin, linea) && linea.size()) {
sscanf(linea.c_str(), "%d %d %d %c", &contestant, &problem, &time, &l);
equipos[contestant].submit = true;
if(equipos[contestant].solved[problem]) continue;
if(l == 'C' || l == 'I') {
if (l == 'C') {
equipos[contestant].solved[problem] = 1;
equipos[contestant].penalty[problem] += time;
}
else
equipos[contestant].penalty[problem] += 20;
}
}
calcular();
if(!first) printf("\n");
first = false;
sort(equipos, equipos + 101);
for (int i = 0; i < 101; i++) {
if(equipos[i].submit)
printf("%d %d %d\n", equipos[i].id, equipos[i].solved[10], equipos[i].penalty[10]);
}
}
return 0;
}
483 - Word Scramble, uva
#include<iostream>
#include<sstream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int main(){
string cadena;
stringstream ss;
bool first;
while(getline(cin, cadena)){
ss.clear();
first = true;
ss << cadena;
while(ss >> cadena){
reverse(cadena.begin(), cadena.end());
if(first) {
cout << cadena;
first = false;
}
else
cout << " "<< cadena;
}
cout << endl;
}
return 0;
}
10082 - WERTYU, uva
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " -- "<< #b << " = " << b << endl;
using namespace std;
string palabra;
string nuevo;
int main(){
map mapa;
mapa['B'] = 'V'; mapa['L'] = 'K'; mapa['W'] = 'Q'; mapa['8'] = '7'; mapa[','] = 'M';
mapa['C'] = 'X'; mapa['M'] = 'N'; mapa['X'] = 'Z'; mapa['9'] = '8'; mapa['.'] = ',';
mapa['D'] = 'S'; mapa['N'] = 'B'; mapa['Y'] = 'T'; mapa['0'] = '9'; mapa['/'] = '.';
mapa['E'] = 'W'; mapa['O'] = 'I'; mapa['1'] = '`'; mapa['-'] = '0'; mapa[' '] = ' ';
mapa['F'] = 'D'; mapa['P'] = 'O'; mapa['2'] = '1'; mapa['='] = '-';
mapa['G'] = 'F'; mapa['R'] = 'E'; mapa['3'] = '2'; mapa['['] = 'P';
mapa['H'] = 'G'; mapa['S'] = 'A'; mapa['4'] = '3'; mapa[']'] = '[';
mapa['I'] = 'U'; mapa['T'] = 'R'; mapa['5'] = '4'; mapa['\\'] = ']';
mapa['J'] = 'H'; mapa['U'] = 'Y'; mapa['6'] = '5'; mapa[';'] = 'L';
mapa['K'] = 'J'; mapa['V'] = 'C'; mapa['7'] = '6'; mapa['\''] = ';';
/*int tam_map = mapa.size();
db(tam_map);
for(map:: iterator it = mapa.begin(); it != mapa.end(); ++it){
db2(it->first, it->second);
}*/
while(getline(cin , palabra)){
int len = palabra.size();
nuevo = "";
for(int i = 0; i < len; i++){
nuevo += mapa[palabra[i]];
}
cout << nuevo << endl;
}
return 0;
}
10363 - Tic Tac Toe, uva
#include <iostream>
#include <vector>
#include <cstdio>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int main() {
int t, X, O, michiX, michiO, puroX, puroO;
cin >> t;
vector lista(3);
for(int i = 0; i < t; i++){
X = O = 0;
for(int k = 0; k < 3; k++){
cin >> lista[k];
for(int u = 0; u < lista[k].size(); u++){
if(lista[k][u] == 'X') X++;
if(lista[k][u] == 'O') O++;
}
}
michiX = michiO = puroX = puroO = 0;
for(int i = 0; i < 3; i++){
puroX = 0;
puroO = 0;
for(int j = 0; j < 3; j++){
if(lista[i][j] == 'X') puroX++;
if(lista[i][j] == 'O') puroO++;
}
if(puroX == 3) michiX++;
if(puroO == 3) michiO++;
puroX = 0;
puroO = 0;
for(int j = 0; j < 3; j++){
if(lista[j][i] == 'X') puroX++;
if(lista[j][i] == 'O') puroO++;
}
if(puroX == 3) michiX++;
if(puroO == 3) michiO++;
}
puroX = 0;
puroO = 0;
for(int i = 0; i < 3; i++){
if(lista[i][i] == 'X') puroX++;
if(lista[i][i] == 'O') puroO++;
}
if(puroX == 3) michiX++;
if(puroO == 3) michiO++;
puroX = 0;
puroO = 0;
for(int i = 0; i < 3; i++){
if(lista[i][2 - i] == 'X') puroX++;
if(lista[i][2 - i] == 'O') puroO++;
}
if(puroX == 3) michiX++;
if(puroO == 3) michiO++;
if(michiX == 0 && michiO == 0){
if( X - 1 == O || X == O) cout << "yes" << endl;
else cout << "no" << endl;
}
else
if((michiX == 1 || michiX == 2) && michiO == 0){
if(X - 1 == O) cout << "yes" << endl;
else cout << "no" << endl;
}
else
if(michiX == 0 && michiO == 1)
if(X == O) cout << "yes" << endl;
else cout << "no" << endl;
else
cout << "no" << endl;
}
return 0;
}
573 - The Snail, uva
#include<iostream>
#include<cstdio>
#include<cmath>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int main(){
double h, d, u, f;
int days = 0;
while(cin >> h >> u >> d >> f && h != 0){
days = 0;
double climbed = 0;
double fac = (f * u) / 100.;
while(true){
days++;
if(u >= 0) climbed += u;
u -= fac;
if(climbed > h) break;
climbed -= d;
if(climbed < 0) break;
}
if(climbed > h) printf("success on day %d\n", days);
else printf("failure on day %d\n", days);
}
return 0;
}
739 - Soundex Indexing, uva
#include<iostream> #include<cstdlib> #include<cstdio> #include<map> #include<cstring> #define db(a) cout << #a << " = " << a << endl; #define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++) using namespace std; mapmapa; string procesar_codigo(string palabra){ string res = ""; res += palabra[0]; for(int i = 1; i < palabra.size() && res.size() < 5; i++){ res += (mapa[palabra[i - 1]] != mapa[palabra[i]]) ? mapa[palabra[i]] : ""; } if(res.size() == 5) res = res.substr(0,4); if(res.size() < 4) res += string(4 - res.size(), '0'); return res; } int main(){ string linea; mapa['B'] = "1"; mapa['C'] = "2"; mapa['J'] = "2"; mapa['D'] = "3"; mapa['N'] = "5"; mapa['P'] = "1"; mapa['S'] = "2"; mapa['Q'] = "2"; mapa['T'] = "3"; mapa['R'] = "6"; mapa['F'] = "1"; mapa['K'] = "2"; mapa['X'] = "2"; mapa['L'] = "4"; mapa['V'] = "1"; mapa['G'] = "2"; mapa['Z'] = "2"; mapa['M'] = "5"; mapa['A'] = ""; mapa['U'] = ""; mapa['E'] = ""; mapa['Y'] = ""; mapa['I'] = ""; mapa['W'] = ""; mapa['O'] = ""; mapa['H'] = ""; cout << " NAME SOUNDEX CODE" << endl; while(cin >> linea){ string res = string(9, ' '); res += linea; string aumento = string(25 - linea.size(),' '); res += aumento + procesar_codigo(linea); cout << res << endl; } string s = string(19,' '); s += "END OF OUTPUT"; cout << s << endl; return 0; }
11616 - Roman Numerals, uva
#include<iostream>
#include<cstdio>
#include<cmath>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int divisores[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
string romanos[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int main(){
string numero;
int num;
while(cin >> numero){
int len = numero.size();
num = 0;
if(numero[0] > '0' && numero[0] <= '9'){
int p = 1;
for(int i = 0; i < len; i++){
num += p * (numero[len - i - 1] - 48);
p *= 10;
}
string res = "";
for(int i = 0; i < 13; i++){
if(num >= divisores[i]){
int div = num / divisores[i];
num = num % divisores[i];
for(int k = 0; k < div; k++)
res += romanos[i];
}
}
cout << res << endl;
}
else{
for(int i = 0; i < len; i++){
if(numero[i] == 'M') {
num += 1000;
continue;
}
if(numero[i] == 'C' && i + 1 < len && numero[i + 1] == 'M') {
num += 900;
i++;
continue;
}
if(numero[i] == 'D') {
num += 500;
continue;
}
if(numero[i] == 'C' && i + 1 < len && numero[i + 1] == 'D') {
num += 400;
i++;
continue;
}
else if(numero[i] == 'C') {
num += 100;
continue;
}
if(numero[i] == 'X' && i + 1 < len && numero[i + 1] == 'C') {
num += 90;
i++;
continue;
}
if(numero[i] == 'L') {
num += 50;
continue;
}
if(numero[i] == 'X' && i + 1 < len && numero[i + 1] == 'L') {
num += 40;
i++;
continue;
}
if(numero[i] == 'X') {
num += 10;
continue;
}
if(numero[i] == 'I' && i + 1 < len && numero[i + 1] == 'X') {
num += 9;
i++;
continue;
}
if(numero[i] == 'V') {
num += 5;
continue;
}
if(numero[i] == 'I' && i + 1 < len && numero[i + 1] == 'V') {
num += 4;
i++;
continue;
}
if(numero[i] == 'I') {
num++;
continue;
}
}
cout << num << endl;
}
}
return 0;
}
10141 - Request for Proposal, uva
#include<iostream>
#include<sstream>
#include<cstdlib>
#include<cstdio>
#include<map>
#include<cstring>
#include<algorithm>
#include<vector>
#include<limits>
#include<set>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " -- "<< #b << " = " << b << endl;
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
int main(){
double compliance, min_price;
int p, n, num_met;
string linea, name_aux, name;
double min_price_aux;
int cont = 0;
while(scanf("%d%d\n", &n , &p)){
if(n == 0 && p == 0) break;
min_price = numeric_limits::max();
compliance = 0.;
if (cont != 0)printf("\n");
for(int k = 0; k < n; k++) getline(cin, linea, '\n');
for(int t = 0; t < p; t++){
getline(cin, name_aux, '\n');
scanf("%lf%d\n",&min_price_aux, &num_met);
for(int k = 0; k < num_met; k++)getline(cin, linea, '\n');
if(num_met > compliance){
compliance = num_met;
min_price = min_price_aux;
name = name_aux;
}
else{
if(num_met == compliance && min_price_aux < min_price){
min_price = min_price_aux;
name = name_aux;
}
}
}
printf("RFP #%d\n%s\n", ++cont,name.c_str());
}
return 0;
}
11340 - Newspaper, uva
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<map>
#include<cstring>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " -- "<< #b << " = " << b << endl;
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
int main(){
map mapa;
int t = 0, keys, lines, valor;
double pagar = 0.;
string linea;
char test[10], clave;
bool first;
cin.getline(test, 10, '\n');
t = atoi(test);
for(int i = 0; i < t; i++){
mapa.clear();
pagar =0.;
cin.getline(test, 10, '\n');
keys = atoi(test);
for(int k = 0; k < keys; k++){
getline(cin, linea);
char *st, *buf, sep[] = " ";
buf = strdup(linea.c_str());
st = strtok(buf, sep);
first = true;
valor = 0;
while(st){
if(first){
clave = st[0];
first = false;
}
else{
valor = atoi(st);
}
st = strtok(0, sep);
}
mapa[clave] = valor;
}
cin.getline(test, 10, '\n');
lines = atoi(test);
//db(lines);
for(int l = 0; l < lines; l++){
getline(cin, linea);
int len = linea.size();
for(int v = 0; v < len; v++){
if(mapa[linea[v]]) pagar += mapa[linea[v]] * 0.01;
}
}
printf("%.2f$\n", pagar);
}
/*foreach(it, mapa){
db2(it->first, it->second);
}*/
return 0;
}
10420 - List of Conquests, uva
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<map>
#include<cstring>
#define db(a) cout << #a << " = " << a << endl;
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
int main(){
int t;
string linea;
char test[10];
cin.getline(test, 10,'\n');
t = atoi(test);
map mapa;
for(int i = 0; i < t; i++){
getline(cin, linea);
char *st, *buf, sep[] = " ";
buf = strdup(linea.c_str());
st = strtok(buf, sep);
while(st){
mapa[st]++;
break;
}
}
foreach(it, mapa){
printf("%s %d\n", it->first.c_str(), it->second);
}
return 0;
}
837 - Light and Transparency, uva
#include<iostream>
#include<sstream>
#include<cstdlib>
#include<cstdio>
#include<map>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " -- "<< #b << " = " << b << endl;
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
struct segmento{
double x0, x, factor;
segmento(double px0, double px, double pfactor):x0(px0), x(px), factor(pfactor){};
};
int main(){
int t, n;
double x1, y1, x2, y2, factor;
char num_seg[10];
string linea;
stringstream ss;
cin.getline(num_seg, 10, '\n');
t = atoi(num_seg);
vector segmentos;
vector puntos;
for(int i = 0; i < t; i++){
segmentos.clear();
puntos.clear();
getchar();
cin.getline(num_seg, 10, '\n');
n = atoi(num_seg);
for(int k = 0; k < n; k++){
getline(cin , linea);
ss.clear();
ss << linea;
ss >> x1 >> y1 >> x2 >> y2 >> factor;
puntos.push_back(x1);
puntos.push_back(x2);
if(x1 > x2) swap(x1, x2);
segmento el_segmento(x1, x2, factor);
segmentos.push_back(el_segmento);
}
//para los puntos
set setpuntos(puntos.begin(), puntos.end());
vector puntitos(setpuntos.begin(), setpuntos.end());
sort(puntitos.begin(), puntitos.end());
int puntos_size = puntitos.size();
printf("%d\n", puntos_size + 1);
printf("-inf %.3f 1.000\n",puntitos[0]);
for(int k = 0; k + 1 < puntos_size; k++){
factor = 1.0;
double x = puntitos[k];
for(int h = 0; h < segmentos.size(); h++){
if(segmentos[h].x0 <= x && x < segmentos[h].x)
factor *= segmentos[h].factor;
}
printf("%.3f %.3f %.3f\n",x, puntitos[k + 1], factor);
}
printf("%.3f +inf 1.000\n",puntitos[puntos_size - 1]);
if(i + 1 != t) printf("\n");
}
return 0;
}
10703 - Free spots, uva
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#define db(a) cout << #a << " = " << a << endl;
int board[500][500];
using namespace std;
int main(){
int W, H, N, X1, Y1, X2, Y2, total;
while(scanf("%d%d%d", &W, &H, &N)){
if(W == 0 && H == 0 && N == 0) break;
total = W * H;
for(int i = 0; i < H; i++)
for(int j = 0; j < W; j++)
board[i][j] = 1;
for(int k = 0; k < N; k++){
scanf("%d%d%d%d", &X1, &Y1, &X2, &Y2);
X1--, Y1--, X2--, Y2--;
if(X1 > X2) swap(X1, X2);
if(Y1 > Y2) swap(Y1, Y2);
for(int i = Y1; i <= Y2; i++)
for(int j = X1; j <= X2; j++)
if(board[i][j]) board[i][j] = 0, total--;
}
if(total)
if(total != 1)
printf("There are %d empty spots.\n", total);
else
printf("There is one empty spot.\n");
else
printf("There is no empty spots.\n");
}
return 0;
}
11223 - O: dah dah dah, uva
#include<iostream>
#include<sstream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<map>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
string evaluar(string buf){
return buf.size() == 2 ? " " : "";
}
int main(){
map mapa;
mapa[".-"] = "A";mapa[".---"] = "J";mapa[".-."] = "R";mapa["--.."] = "Z";mapa["---.."] = "8";
mapa["-..."] = "B";mapa["-.-"] = "K";mapa["..."] = "S";mapa["-----"] = "0";mapa["----."] = "9";
mapa["-.-."] = "C";mapa[".-.."] = "L";mapa["-"] = "T";mapa[".----"] = "1";mapa[".-.-.-"] = ".";
mapa["-.."] = "D";mapa["--"] = "M";mapa["..-"] = "U";mapa["..---"] = "2";mapa["--..--"] = ",";
mapa["."] = "E";mapa["-."] = "N";mapa["...-"] = "V";mapa["...--"] = "3";mapa["..--.."] = "?";
mapa["..-."] = "F";mapa["---"] = "O";mapa[".--"] = "W";mapa["....-"] = "4";mapa[".----."] = "'";
mapa["--."] = "G";mapa[".--."] = "P";mapa["-..-"] = "X";mapa["....."] = "5";mapa["-.-.--"] = "!";
mapa["...."] = "H";mapa["--.-"] = "Q";mapa["-.--"] = "Y";mapa["-...."] = "6";mapa["-..-."] = "/";
mapa[".."] = "I";mapa["--.-"] = "Q";mapa["-.--.-"] = ")";mapa["--..."] = "7";mapa["-.--."] = "(";
mapa[".-..."] = "&";mapa["---..."] = ":";mapa["-.-.-."] = ";";mapa["-...-"] = "=";mapa[".-.-."] = "+";
mapa["-....-"] = "-";mapa["..--.-"] = "_";mapa[".-..-."] = "\"";mapa[".--.-."] = "@";mapa[""] = "";
//freopen("ou.out", "w", stdout);
int t = 0;
char test[2];
string linea, res = "", buf, morse;
cin.getline(test, 2, '\n');
t = atoi(test);
for(int i = 0; i < t; i++){
getline(cin , linea);
res = "";
buf = "";
morse = "";
for(int k = 0; k < linea.size(); k++){
if(linea[k] == ' ') {
res += mapa[morse];
morse = "";
buf += ' ';
}
else{
res += evaluar(buf);
buf = "";
morse += linea[k];
}
}
res += mapa[morse];
if(i + 1 == t)
printf("Message #%d\n%s\n", i + 1, res.c_str());
else
printf("Message #%d\n%s\n\n", i + 1, res.c_str());
}
}
10683 - The decadary watch, uva
#include<iostream>
#include<cstring>
#include<cstdio>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " -- "<< #b << " = " << b << endl;
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
int main(){
string t;
int HH, MM, SS, CC, g;
while(cin >> t){
HH = (t[0] - 48)*10 + (t[1] - 48);
MM = (t[2] - 48)*10 + (t[3] - 48);
SS = (t[4] - 48)*10 + (t[5] - 48);
CC = (t[6] - 48)*10 + (t[7] - 48);
g = HH * 3600 + MM * 60 + SS;
g *= 100;
g += CC;
g = (125 * g) / 108;
printf("%07d\n", g);
}
return 0;
}
11727 - Cost Cutting - UVA
#include<iostream>
#include<sstream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int main(){
int a, b, c, t;
cin >> t;
int i = 1;
while(t--){
cin >> a >> b >> c;
if(a > b) swap(a, b);
if(a > c) swap(a, c);
if(b > c) swap(b, c);
cout << "Case "<< i++ << ": " << b << endl;
}
return 0;
}
661 - Blowing Fuses - UVA
#include<iostream> #include<vector> #include<algorithm> #include<cmath> #define db(a) cout << #a << " = " << a << endl; #includeusing namespace std; int main(){ int n, m, c; int cont = 1; //freopen("in.in", "r", stdin); //freopen("ou.out", "w", stdout); while(cin >> n >> m >> c){ if(n == 0 && m == 0 && c == 0) break; vector estado(n + 1, false); vector consumo(n + 1, 0); for(int i = 1; i <= n; i++){ cin >> consumo[i]; } int maxi = 0; int id = 0; int res = 0; bool blown = false; for(int i = 1; i <= m && !blown; i++){ cin >> id; if(estado[id]){ maxi -= consumo[id]; estado[id] = false; } else{ maxi += consumo[id]; if(maxi > c) { blown = true; for(int r = i + 1; r <= m; r++) cin >> id; } estado[id] = true; res = max(res, maxi); } } cout << "Sequence " << cont++ << endl; if(!blown) { cout << "Fuse was not blown." << endl; cout << "Maximal power consumption was " << res << " amperes." << endl << endl; } else{ cout << "Fuse was blown." << endl << endl; } } return 0; }
10281 - Average Speed - UVA
#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstdlib>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int seconds(int h, int m, int s){
return h * 3600 + m * 60 + s;
}
int main(){
string linea, tiempo;
int h, m, s;
float recorrido = 0;
stringstream ss;
/*freopen("in.in", "r", stdin);
freopen("ou.out", "w", stdout);*/
int current_time = 0;
float velocidad_ini = 0;
bool primero = true;
while(getline(cin, linea)){
ss.clear();
ss << linea;
bool first = true;
while(ss >> linea){
if(first){
sscanf(linea.c_str(), "%d:%d:%d", &h, &m, &s);
tiempo = linea;
first = false;
}
else first = true;
}
if(first){
if(primero){
recorrido = 0;
primero = false;
current_time = seconds(h, m, s);
}
else {
recorrido += (seconds(h, m, s) - current_time) * velocidad_ini / 3600.;
current_time = seconds(h , m, s);
}
velocidad_ini = atoi(linea.c_str());
}
else{
int tiempo_reporte = seconds(h, m, s) - current_time;
float distancia = velocidad_ini * tiempo_reporte / 3600.;
distancia += recorrido;
printf("%s %.2f km\n", tiempo.c_str(), distancia);
}
}
return 0;
}
10901 - Ferry Loading III - UVA
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define db(a) cout << #a << " = " << a << endl;
#define foreach(it,l) for (typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
int main() {
int c, n, t, m, val, kr = 0, kl = 0, cap = 0, time = 0, cont = 0;
char direccion[20];
scanf("%d", &c);
for (int k = 0; k < c; k++) {
queue<int> left, right;
scanf("%d %d %d", &n, &t, &m);
kr = kl = 0;
vector<int> posiciones(m);
cont = 0;
for (int i = 0; i < m; i++) {
scanf("%d %s", &val, direccion);
if(strcmp(direccion,"left") == 0)
left.push(val), kl++,posiciones[cont++] = 0;
else
right.push(val), kr++,posiciones[cont++] = 1;
}
vector<int> listaL(kl), listaR(kr);
kl = kr = cap = time = 0;
string ini = "left";
while (!left.empty() || !right.empty()) {
if (!left.empty() && !right.empty()) {
if(left.front() > time && right.front() > time) {
if(left.front() > right.front()) {
time += right.front() - time;
if(ini == "left") time += t;
ini = "right";
}
else {
time += left.front() - time;
if(ini == "right") time += t;
ini = "left";
}
}
}
else {
if (left.empty()) {
if (right.front() > time) {
time += right.front() - time;
if(ini == "left") time += t;
ini = "right";
}
}
else {
if (left.front() > time) {
time += left.front() - time;
if(ini == "right") time += t;
ini = "left";
}
}
}
if (ini == "left") {
cap = 0;
while (cap < n && !left.empty() && left.front() <= time) {
//printf("left %d\n", time + t);
listaL[kl++] = time + t;
left.pop();
cap++;
}
time += t;
ini = "right";
}
else {
cap = 0;
while (cap < n && !right.empty() && right.front() <= time) {
//printf("right %d\n", time + t);
listaR[kr++] = time + t;
right.pop();
cap++;
}
time += t;
ini = "left";
}
}
kl = kr = 0;
for (int i = 0; i < m; i++) {
if (!posiciones[i])
printf("%d\n", listaL[kl++]);
else
printf("%d\n", listaR[kr++]);
}
if(k + 1 != c) printf("\n");
}
return 0;
}
336 - A Node Too Far - UVA
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
using namespace std;
int main() {
int from, to, nc, ttl, t = 1, llega, total_nodes;
map< int,vector > adyacencia;
map< int, int > dist;
while (cin >> nc && nc) {
adyacencia.clear();
for (int i = 0; i < nc; i++) {
cin >> from >> to;
adyacencia[from].push_back(to);
adyacencia[to].push_back(from);
}
total_nodes = adyacencia.size();
while (cin >> from >> ttl) {
if (from == 0 && ttl == 0) break;
dist.clear();
queue q;
q.push(from);
dist[from] = 0;
while (!q.empty()) {
int u = q.front(); q.pop();
//printf("Visit %d, Layer %d\n", u, dist[u]);
for (int i = 0; i < adyacencia[u].size(); i++) {
if (!dist.count(adyacencia[u][i])) {
dist[adyacencia[u][i]] = dist[u] + 1;
q.push(adyacencia[u][i]);
}
}
}
llega = 0;
for (map::iterator it = dist.begin(); it != dist.end(); it++) {
if (it->second <= ttl) llega++;
}
printf("Case %d: %d nodes not reachable from node %d with TTL = %d.\n", t++, total_nodes - llega, from, ttl);
}
}
return 0;
}
viernes, 21 de octubre de 2011
727 - Equation - UVA
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <stack>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int main ()
{
char c[2];
int cont = 0, casos;
void *p;
string res = "";
scanf("%d", &casos);
gets(c);
gets(c);
for (int i = 0; i < casos; i++) {
res = "";
stack<char> pila;
while(1) {
p = gets(c);
if (p == NULL) break;
if (c[0] == '\0') break;
//original += c[0];
if (isdigit(c[0])) res += c[0];
else {
if (c[0] == ')') {
while(pila.top() != '(') {
res += pila.top();
pila.pop();
}
pila.pop();
continue;
}
if (c[0] == '(') {
pila.push(c[0]);
continue;
}
if(c[0] != '*' && c[0] != '/' && c[0] != '+' && c[0] != '-') continue;
if (pila.empty()) {
pila.push(c[0]);
continue;
}
while(!pila.empty() && pila.top() != '(' && ((pila.top() == '*' || pila.top() == '/')
|| !((pila.top() == '+' || pila.top() == '-') && (c[0] == '*' || c[0] == '/')))) {
res += pila.top();
pila.pop();
}
pila.push(c[0]);
}
}
while (!pila.empty()) {
res += pila.top();
pila.pop();
}
//db(original);
if(i + 1 == casos)
printf("%s\n", res.c_str());
else
printf("%s\n\n", res.c_str());
}
return 0;
}
514 - Rails - UVA
#include<cstdio>
#include<stack>
using namespace std;
int main() {
int n, val;
while (1) {
scanf("%d", &n);
if (n == 0) break;
while (1) {
scanf("%d", &val);
if (val == 0) {
printf("\n");
break;
}
stack A, B;
A.push(val);
for (int i = 1; i < n; i++) {
scanf("%d", &val);
A.push(val);
}
int i = n;
for (; i >= 1;) {
if (!B.empty() && B.top() == i) {
B.pop();
i--;
continue;
}
if (A.empty()) break;
if (A.top() != i) B.push(A.top());
else i--;
A.pop();
}
if (A.empty() && B.empty()) puts("Yes");
else puts("No");
}
}
return 0;
}
127 - Accordian Patience - UVA
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cstdlib>
#include<stack>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl;
using namespace std;
int total = 0;
struct carta {
char *kind;
carta(char *kind) : kind(kind) {}
};
void move(vector< stack<carta> >& cartas,const int& target,const int& source) {
cartas[target].push(cartas[source].top());
cartas[source].pop();
if(cartas[source].empty()) total--, cartas.erase(cartas.begin() + source);
}
bool can(vector< stack<carta> >& cartas,const int& target,const int& source) {
return cartas[target].top().kind[0] == cartas[source].top().kind[0] ||
cartas[target].top().kind[1] == cartas[source].top().kind[1];
}
void jugar(vector< stack<carta> >& cartas) {
int i = 0;
again:
for (; i < total; i++) {
if (i >= 3 && can(cartas, i - 3, i)) {
move(cartas, i - 3, i);
i = i - 3;
goto again;
}
else if( i >= 1 && can(cartas, i - 1, i)) {
move(cartas, i - 1, i);
i = i - 1;
goto again;
}
}
}
int main() {
char line[200], line2[200];
bool fin = false;
while(1) {
total = 52;
vector< stack<carta> > cartas(52);
gets(line);
if(line[0] == '#') break;
char *st, sep[] = " ";
st = strtok(line, sep);
int i = 0;
while (st) {
carta card(st);
cartas[i++].push(card);
st = strtok(0, sep);
}
gets(line2);
st = strtok(line2, sep);
while (st) {
carta card(st);
cartas[i++].push(card);
st = strtok(0, sep);
}
jugar(cartas);
printf("%d pile%s remaining:", total, (total > 1) ? "s" : "");
for (int i = 0; i < total; i++) {
if(!cartas[i].empty()) printf(" %d", cartas[i].size());
}
printf("\n");
}
return 0;
}
jueves, 20 de octubre de 2011
11495 - Bubbles and Buckets - UVA
#include<cstdio>
using namespace std;
int lista[100000], res = 0;
void merge(const int& ini, const int& med, const int& fin) {
int i = ini;
int j = med + 1;
int k = 0;
int vector[fin - ini + 1];
while (i <= med && j <= fin) {
if(lista[i] <= lista[j])
vector[k++] = lista[i++];
else
vector[k++] = lista[j++], res += med - i + 1;
}
while (i <= med) vector[k++] = lista[i++];
while (j <= fin) vector[k++] = lista[j++];
for (i = 0; i < k; i++) lista[ini + i] = vector[i];
}
void merge_sort(const int& ini, const int& fin) {
if (ini < fin) {
int med = (ini + fin) / 2;
merge_sort(ini, med);
merge_sort(med + 1, fin);
merge(ini, med, fin);
}
}
int main() {
int n;
while(scanf("%d", &n) && n) {
res = 0;
for (int i = 0; i < n; i++)
scanf("%d", lista + i);
merge_sort(0, n - 1);
if(res % 2 == 0)
puts("Carlos");
else
puts("Marcelo");
}
return 0;
}
10810 - Ultra-QuickSort - UVA
#include<cstdio>
#include<cstdlib>
using namespace std;
long long res = 0;
void juntar(int* lista, const int& ini,const int& med, const int& fin) {
int vector[fin - ini + 1];
int i = ini;
int j = med + 1;
int k = 0;
while (i <= med && j <= fin)
if (lista[i] <= lista[j])
vector[k++] = lista[i++];
else
vector[k++] = lista[j++], res += med - i + 1;
while (i <= med) vector[k++] = lista[i++];
while (j <= fin) vector[k++] = lista[j++];
for (i = 0; i < k; i++) lista[ini + i] = vector[i];
//free(vector);
}
void merge_sort(int* lista,const int& ini,const int& fin) {
if (ini < fin) {
int med = (ini + fin) / 2;
merge_sort(lista, ini, med);
merge_sort(lista, med + 1, fin);
juntar(lista, ini, med, fin);
}
}
void mostrar(int* lista, const int& n) {
for (int i = 0; i < n; i++)
printf("%d ", *(lista + i));
printf("\n");
}
int main() {
int n, lista[500000];
while(scanf("%d", &n)) {
if (n == 0) break;
res = 0;
for (int i = 0; i < n; i++)
scanf("%d", lista + i);
merge_sort(lista, 0, n - 1);
printf("%lld\n", res);
}
return 0;
}
11040 - Add bricks in the wall
#include<iostream>
#include<cstring>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
int matriz[9][9], t;
cin >> t;
while (t--) {
memset(matriz, 0, sizeof matriz);
for (int i = 0; i < 5; i++) {
for (int k = 0; k < i + 1; k++) {
cin >> matriz[i * 2][k * 2];
}
}
for (int i = 0; i < 9; i += 2) {
for (int k = 1; k < i; k += 2){
matriz[i][k] = (matriz[i - 2][k - 1] - matriz[i][k - 1] - matriz[i][k + 1]) / 2;
matriz[i - 1][k - 1] = matriz[i][k - 1] + matriz[i][k];
matriz[i - 1][k] = matriz[i][k] + matriz[i][k + 1];
}
}
for (int i = 0; i < 9; i++) {
bool first = true;
for (int j = 0; j < i + 1; j++) {
if (first) {
cout << matriz[i][j];
first = false;
}
else
cout << " " << matriz[i][j];
}
cout << endl;
}
}
return 0;
}
miércoles, 19 de octubre de 2011
Equation - TJU
#include<cstdio>
#include<cmath>
using namespace std;
int main() {
int n, t, ways, z;
scanf("%d", &t);
for (int i = 0; i < t; i++) {
scanf("%d", &n);
ways = 0;
for (int x = 0; x <= 1000; x++)
for (int y = x; y <= 1000; y++) {
if(n - x * x - y * y < 0) break;
z = sqrt(n - x * x - y * y);
if(z <= 1000 && z * z == (n - x * x - y * y)) {
if(x == y) ways++;
else ways += 2;
}
}
printf("%d\n", ways);
}
return 0;
}
344 - Roman Digititis - UVA
#include<iostream>
#include<map>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int main() {
int n;
string romanos[] = {"c", "xc", "l", "xl", "x", "ix", "v", "iv", "i"};
char rom[] = {'c', 'l', 'x', 'v', 'i'};
int val[] = {100, 90, 50, 40, 10, 9, 5, 4, 1};
while(cin >> n) {
if(n == 0) break;
map mapa;
for (int k = 1; k <= n; k++) {
int m = k;
string cad = "";
for (int i = 0; i < 9; i++) {
int div = m / val[i];
m = m % val[i];
for (int u = 0; u < div; u++) {
cad += romanos[i];
}
}
//db(cad);
for (int i = 0; i < cad.size(); i++)
mapa[cad[i]]++;
}
cout << n << ": ";
for (int i = 4; i >= 0; i--) {
if(i != 0)
cout << mapa[rom[i]] << " " << rom[i] << ", ";
else
cout << mapa[rom[i]] << " " << rom[i];
}
cout << endl;
}
return 0;
}
Reloj - CodeForces
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<vector>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl;
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
string reves(int a) {
char arr[10];
sprintf(arr, "%02d", a);
int len = strlen(arr);
reverse(arr , arr + len);
return arr;
}
int main() {
int H, M;
string hora;
while(cin >> hora) {
char res[10];
bool find = false, first = true;
sscanf(hora.c_str(), "%d:%d", &H, &M);
for (int h = 0; h < 24 && !find; h++) {
int m = 0;
if(first) {
m = M + 1;
first = false;
}
for (; m < 60 && !find; m++) {
char mc[10];
sprintf(mc, "%02d", m);
if(reves((h + H) % 24) == mc)
sprintf(res, "%02d:%02d", (h + H) % 24, m), find = true;
}
}
cout << res << endl;
}
return 0;
}
Multiple of 11
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
string numero = "";
while(cin >> numero && numero != "0"){
int tam = numero.size();
int sumpar = 0,sumimpar = 0;
for(int i = 0; i < tam; i++){
if(i % 2 == 0) sumimpar += numero[tam - i - 1] - 48;
else sumpar += numero[tam - i - 1] - 48;
}
if((sumimpar - sumpar) % 11 == 0) cout << numero << " is a multiple of 11." << endl;
else cout << numero << " is not a multiple of 11." << endl;
}
return 0;
}
Count Square
#include<iostream>
#include<iostream>
#include<map>
#include<vector>
using namespace std;
int main() {
int h, v;
ios_base::sync_with_stdio(false);
while(cin >> h >> v) {
vector H(h), V(v);
for (int i = 0; i < h; i++) cin >> H[i];
for (int i = 0; i < v; i++) cin >> V[i];
vector difH, difV;
map mapaH, mapaV;
for (int i = 0; i + 1 < h; i++)
for (int j = i + 1; j < h; j++)
mapaH[H[j] - H[i]]++;
for (int i = 0; i + 1 < v; i++)
for (int j = i + 1; j < v; j++)
mapaV[V[j] - V[i]]++;
int ways = 0;
map ::iterator it;
for (it = mapaH.begin(); it != mapaH.end(); it++)
ways += it->second * mapaV[it->first];
cout << ways << endl;
}
return 0;
}
PKU 3517 And Then There Was One
#include<cstdio>
#include<iostream>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl;
#define db3(a, b, c) cout << #a << " = " << a << " " << #b << " = " << b << " " << #c << " = " << c << endl;
using namespace std;
int lista[10000];
bool func_del(int a) {
return a == -1;
}
int* borrar_si(int *ini, int *fin) {
int *hasta = ini;
for (; ini != fin; ini++) {
if (!func_del(*ini)) *hasta++ = *ini;
}
return hasta;
}
int main() {
int n, k, m;
while ( scanf("%d%d%d", &n, &k, &m) ) {
if (n == 0 && k == 0 && m == 0) break;
for (int i = 0; i < n; i++) lista[i] = i + 1;
int start = m - 1;
int n2 = n;
for (int i = 0; i < n - 1; i++) {
lista[start] = -1;
start += k;
if(start >= n2) {
start -= n2;
n2 = borrar_si (lista, lista + n2) - lista;
start %= n2;
}
}
for (int i = 0; i < n2; i++)
if(lista[i] != - 1) {
printf("%d\n", lista[i]);
break;
}
}
return 0;
}
11960 - Divisor Game - UVA
#include<cstdio>
#define MAX 1009
using namespace std;
int crivo[MAX + 1];
int primos[MAX + 1];
int maximos[1000001];
int numbers[1000001];
int n_primos = 0;
void init_crivo() {
int i, j;
for (i = 2; i <= MAX; i++) {
if(!crivo[i]) {
primos[n_primos++] = i;
for (j = i; i * j <= MAX; j++)
crivo[i * j] = 1;
}
}
}
int NOD(int n) {
if(n == 1) return 1;
if(n <= MAX && !crivo[n]) return 2;
int j, r = 1;
for (int i = 0; primos[i] * primos[i] <= n; i++) {
j = 1;
while(n % primos[i] == 0) {
n /= primos[i];
j++;
}
r *= j;
if(n == 1) return r;
}
if(r == 1) return 2;
return r * 2;
}
int main() {
int k, t, n;
init_crivo();
for (int i = 1; i <= 1000000; i++) {
maximos[i] = NOD(i);
numbers[i] = maximos[i] >= maximos[numbers[i - 1]] ? i : numbers[i - 1];
}
scanf("%d", &t);
for(k = 0; k < t; k++) {
scanf("%d", &n);
printf("%d\n", numbers[n]);
}
return 0;
}
palindromics primes TopCoder
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
class PrimePalindromic {
public:
string str(int n) {
char arr[10];
sprintf(arr, "%d", n);
return arr;
}
bool pal(string s) {
int len = s.size();
for (int i = 0; i < len / 2; i++)
if(s[i] != s[len - i - 1]) return false;
return true;
}
int count(int A, int B) {
int T[20];
int res = 0;
for (int k = A; k <= B; k++) {
int num = k, j = 0;
for (int i = 2; i <= sqrt(num); i++)
while(num % i == 0) num /= i, T[j++] = i;
if(num > 1) T[j++] = num;
bool find = false;
do {
string s = "";
for (int i = 0; i < j; i++)
s += str(T[i]);
if(pal(s)) find = true;
} while(next_permutation(T, T + j) && !find);
if(find) res++;
}
return res;
}
};
int main() {
int a, b;
while(cin >> a >> b) {
cout << PrimePalindromic().count(a, b) << endl;
}
return 0;
}
Goldbach's Conjecture - TJU
#include<cstdio>
#define MAX 1010
int crivo[MAX + 1];
int primos[MAX + 1];
int n_primos = 0;
using namespace std;
void init_crivo() {
for (int i = 2; i <= MAX; i++)
if(!crivo[i]) {
primos[n_primos++] = i;
for (int j = i; i * j <= MAX; j++)
crivo[i * j] = 1;
}
}
bool es_primo(int n) {
if(n == 1) return false;
int i = 0;
while(primos[i] * primos[i] <= n) {
if(n % primos[i] == 0) return false;
i++;
}
return true;
}
int main() {
init_crivo();
int n, a, b;
while(scanf("%d", &n)) {
if(n == 0) break;
bool find = false;
a = 2, b = n - 2;
while(a < n && b > 0 && !find) {
if(es_primo(a) && es_primo(b))
printf("%d = %d + %d\n", n, a, b), find = true;
a++, b--;
}
if(!find) printf("Goldbach's conjecture is wrong.\n");
}
return 0;
}
10699 - Count the factors - UVA
#include<cstdio>
#define MAX 1010
using namespace std;
int crivo[MAX + 1];
int primos[MAX + 1];
int n_primos = 0;
void init_crivo() {
for (int i = 2; i <= MAX; i++)
if(!crivo[i]) {
primos[n_primos++] = i;
for (int j = i; i * j <= MAX; j++)
crivo[i * j] = 1;
}
}
int main() {
int n, m, cont;
init_crivo();
while(scanf("%d", &n)) {
if (n == 0) break;
cont = 0;
m = n;
bool divide;
for (int i = 0; primos[i] * primos[i] <= n; i++) {
divide = false;
while(n % primos[i] == 0) n /= primos[i], divide = true;
if(divide)cont++;
}
if(n != 1) cont++;
printf("%d : %d\n", m, cont);
}
return 0;
}
Numeros Amigos
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cmath>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int amigo(int n) {
int m = 0;
for (int i = 1; i * i <= n; i++) {
if(n % i == 0)
m += i + n / i;
if(i * i == n) m -= i;
}
m -= n;
int t = 0;
for (int i = 1; i * i <= m; i++) {
if(m % i == 0)
t += i + m / i;
if(i * i == m) t -= i;
}
t -= m;
if(t == n) return m;
return -1;
}
int main() {
int n;
ios_base::sync_with_stdio(false);
while(cin >> n && n != 0) {
cout << amigo(n) << endl;
}
return 0;
}
algorithm to determine if a number has a friend number, if not then it shows you -1 instead.
Etiquetas:
friend numbers,
numeros amigos,
sin amigos.,
without friends
Suscribirse a:
Comentarios (Atom)