#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++) { mapmapa_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"); mapmapa; 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++) { queueleft, 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); vectorlista(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++){ stackpila; 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(){ mapmapa; 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; vectorlista(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(){ mapmapa; 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); mapmapa; 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); vectorsegmentos; 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(){ mapmapa; 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; } stackA, 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; mapmapa; 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) { vectorH(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:
Entradas (Atom)