Hora de início: 2011-01-18 09:06:00 -0200 Hora de término: 2011-01-18 13:06:00 -0200
POS | Competidor | Resultado | Pontuação | A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Guilherme Souza | 3 (145) | 99 | +0 | -5 | +0 | +0 | ||||
2 | Gabriel Luís Mello Dalalio | 3 (302) | 97 | +0 | +1 | +0 | |||||
3 | Eric Destefanis | 3 (305) | 95 | +0 | -10 | +3 | +0 | ||||
4 | Felipe Abella | 3 (379) | 93 | -8 | +0 | +2 | +0 | ||||
5 | Ricardo Hahn | 3 (386) | 91 | +1 | +0 | +0 | |||||
6 | walter erquinigo | 2 (41) | 89 | +0 | +0 | ||||||
7 | Natan Costa Lima | 2 (96) | 87 | -7 | +1 | +0 | |||||
8 | Jesus Alejandro | 2 (130) | 85 | +0 | +0 | ||||||
9 | Tiago Madeira | 2 (152) | 83 | +0 | +0 | ||||||
10 | Andre Hahn | 2 (185) | 81 | +0 | -1 | +0 | |||||
11 | Renato Parente | 2 (197) | 79 | +0 | +1 | ||||||
12 | Eduardo Ribas | 2 (286) | 77 | +0 | +4 | ||||||
13 | Filipe Martins | 2 (295) | 75 | -5 | +0 | +1 | |||||
14 | Pablo Pinheiro | 2 (303) | 73 | +0 | +1 | ||||||
15 | Adriana Libório | 2 (449) | 71 | +3 | +0 | ||||||
16 | Leonardo Inácio | 2 (466) | 69 | +2 | +5 | ||||||
17 | Renato Ferreira | 2 (514) | 67 | +4 | +2 | ||||||
18 | Cesar Kawakami | 1 (30) | 65 | +0 | -1 | -3 | |||||
19 | Leonardo Marchetti | 1 (63) | 63 | -4 | -6 | +0 | |||||
20 | Matias Daniel Tealdi | 1 (92) | 61 | -5 | +0 | ||||||
21 | Pedro Veras | 1 (95) | 59 | +0 | -2 | -7 | |||||
22 | Cesar Gamboa | 1 (105) | 57 | -2 | -2 | +0 | |||||
23 | Davi Duarte Pinheiro | 1 (132) | 55 | +0 | -1 | -5 | |||||
24 | Leonardo Martinez | 1 (185) | 53 | +1 | |||||||
25 | Phyllipe Cesar | 1 (202) | 51 | +3 | -9 | ||||||
26 | Atol Fortin | 1 (230) | 49 | -10 | -2 | +3 | |||||
27 | gustavo pacianotto gouveia | 1 (239) | 47 | +1 | -4 | ||||||
28 | Ricardo Oliveira | 1 (276) | 45 | +3 | -3 | ||||||
40 | Gaston Ingaramo | 1 (285) | 21 | +3 | -2 | ||||||
40 | Igor Ramos | 0 (0) | 21 | -8 | -6 | ||||||
40 | Thiago Sonego Goulart | 0 (0) | 21 | -6 | -3 | -6 | |||||
40 | Daniel Ribeiro Moreira | 0 (0) | 21 | -2 | -2 | -3 | |||||
40 | Igor R. de Assis | 0 (0) | 21 | ||||||||
40 | Caique Porto Lira | 0 (0) | 21 | -1 | |||||||
40 | Felipe Menezes Machado | 0 (0) | 21 | -4 | -1 | ||||||
40 | Victor Jatobá | 0 (0) | 21 | ||||||||
40 | Rafael Brandão | 0 (0) | 21 | -4 | -1 | ||||||
40 | Alex Alves da Paixão | 0 (0) | 21 | -2 | |||||||
40 | Renan Ferraz Pires | 0 (0) | 21 | ||||||||
40 | daniel soncco | 0 (0) | 21 | -1 | -2 | -2 | |||||
40 | Douglas Santos | 0 (0) | 21 | -1 | -1 | ||||||
40 | Vinicius Ruoso | 0 (0) | 21 | -6 | -2 | ||||||
40 | Arthur | 0 (0) | 21 | -1 | |||||||
40 | Paulo Costa | 0 (0) | 21 | -10 | -4 | -2 | |||||
40 | Leonardo Flores Zambaldi | 0 (0) | 21 | -3 | |||||||
40 | Vinicius Flores Zambaldi | 0 (0) | 21 | -4 | -1 | ||||||
40 | Nicolas Gumiel | 0 (0) | 21 | -1 | |||||||
40 | Victor Hugo Paredes Mora | 0 (0) | 21 | ||||||||
40 | Edwin Macelo Guzman Buezo | 0 (0) | 21 | -3 | |||||||
40 | Luiz Afonso | 0 (0) | 21 | -3 | -2 | </div> |
#include <cstdio> #include <algorithm> #include <set> #include <climits> using namespace std; const int INF = (INT_MAX / 3); const int MAX_D = 22; const int MAX_K = 7; const int MAX_N = MAX_D * MAX_K; struct Path { int u, v; Path() {} Path(int _u, int _v) { u = _u, v = _v; if (u > v) swap(u, v); } }; bool adj[MAX_N][MAX_N]; int dist[MAX_N][MAX_N]; bool operator < (const Path &a, const Path &b) { int da = dist[a.u][a.v]; int db = dist[b.u][b.v]; if (da != db) return da < db; if (a.u != b.u) return a.u < b.u; return a.v < b.v; } int main() { int d, k, m, source, dest; scanf("%d %d %d", &d, &k, &m); for (int i = 0; i < m; i++) { int a1, u1, a2, u2; scanf("%d.%d - %d.%d", &a1, &u1, &a2, &u2); int u = d*a1 + u1; int v = d*a2 + u2; adj[u][v] = adj[v][u] = true; //printf("%d adj %d\n", u, v); } scanf("%d %d", &source, &dest); if (source > dest) swap(source, dest); set < Path > paths; int n = d*(k + 1); for (int i = 0; i < n; i++) for (int j = i; j < n; j++) { dist[i][j] = dist[j][i] = INF; if (adj[i][j]) { dist[i][j] = dist[j][i] = 1; //printf("inserindo caminho %d a %d dist %d\n", i, j, dist[i][j]); paths.insert(Path(i, j)); } } for (int i = 0; i < n; i++) { dist[i][i] = 0; paths.insert(Path(i, i)); } while (!paths.empty()) { Path p = *paths.begin(); paths.erase(paths.begin()); int u = p.u, v = p.v; //printf("%d a %d dist %d\n", u, v, dist[u][v]); if (u == source && v == dest) { printf("%d\n", dist[u][v]); return 0; } if (u < d && v < d) { int uu = u + d, vv = v + d; while (uu < n && vv < n) { if (dist[u][v] < dist[uu][vv]) { paths.erase(Path(uu, vv)); dist[uu][vv] = dist[vv][uu] = dist[u][v]; paths.insert(Path(uu, vv)); //printf("inseriu interno %d a %d dist %d\n", uu, vv, dist[uu][vv]); } uu += d, vv += d; } } int vert[] = { u, v }; for (int i = 0; i < 2; i++) for (int k = 0; k < n; k++) if (dist[k][vert[1 - i]] < INF) { if (dist[u][v] + dist[k][vert[1 - i]] < dist[vert[i]][k]) { paths.erase(Path(vert[i], k)); dist[vert[i]][k] = dist[k][vert[i]] = dist[u][v] + dist[k][vert[1 - i]]; //printf("expandindo para %d a %d dist %d\n", vert[i], k, dist[vert[i]][k]); paths.insert(Path(vert[i], k)); } } } printf("no solution\n"); return 0; }
#include <cstdio> #include <algorithm> using namespace std; const int MAX_N = 205; const int MAX_C = 10005; int val[MAX_N]; bool can[MAX_N][MAX_C]; bool can2[MAX_N][MAX_C]; bool needed[MAX_N]; bool vis[MAX_N][MAX_C]; int main() { int n, x; int total = 0; scanf("%d %d", &n, &x); for (int i = 0; i < n; i++) { scanf("%d", &val[i]); total += val[i]; } for (int i = 0; i < n; i++) needed[i] = false; int ans = 0; for (int i = 0; i <= n; i++) for (int j = 0; j <= x; j++) can[i][j] = can2[i][j] = vis[i][j] = false; for (int i = 0; i <= n; i++) { can[i][x] = can2[i][x] = true; vis[i][0] = true; } for (int i = n-1; i > 0; i--) for (int j = x; j >= 0; j--) if (vis[i][j]) { if (j + val[i] <= x) vis[i - 1][j + val[i]] = true; vis[i - 1][j] = true; } for (int j = x; j >= 0; j--) for (int i = 0; i < n; i++) { if (i > 0 && j + val[i] <= x && can[i - 1][j + val[i]]) { can[i][j] = true; } if (i > 0 && can[i - 1][j]) { can[i][j] = can2[i][j] = true; } if (i == 0 && val[i] + j == x) can[i][j] = true; } for (int i = 0; i < n; i++) { bool ok = false; for (int j = 0; j <= x; j++) if (vis[i][j] && can2[i][j]) { ok = true; break; } if (!ok) { ans++; needed[i] = true; } } printf("%d\n", ans); bool first = true; for (int i = 0; i < n; i++) if (needed[i]) { if (!first) printf(" "); first = false; printf("%d", val[i]); } if (ans > 0) printf("\n"); return 0; }
#pragma comment(linker, "/STACK:16777216") #include <cstdio> #include <algorithm> #include <utility> #include <vector> #include <cassert> using namespace std; typedef long long lint; const int MAX_N = 80005; const int MAX_T = 4*MAX_N; int p; lint tree[MAX_T][8]; void update(int id, int l, int r, int x, int delta) { // assert(id < MAX_T); if (x < l || x > r) return; if (x == l && x == r) { tree[id][0] = 1; tree[id][1] += delta; tree[id][1] %= p; while (tree[id][1] < 0) tree[id][1] += p; } else { update(2*id, l, (l + r)/2, x, delta); update(2*id + 1, (l + r)/2 + 1, r, x, delta); tree[id][0] = 1; for (int k = 1; k <= 4; k++) { lint sum = 0; for (int kk = 0; kk <= k; kk++) sum = (sum + tree[2*id][kk]*tree[2*id+1][k-kk]) % p; while (sum < 0) sum += p; tree[id][k] = sum; } } } struct T { lint ans[5]; }; T get(int id, int l, int r, int a, int b) { a = max(a, l); b = min(b, r); if (a > r || b < l) { T t; t.ans[0] = 1; t.ans[1] = t.ans[2] = t.ans[3] = t.ans[4] = 0; return t; } if (a == l && b == r) { T t; for (int k = 0; k <= 4; k++) { t.ans[k] = tree[id][k]; //printf("de %d a %d k %d tree %lld\n", l, r, k, tree[id][k]); } return t; } else { T ta = get(2*id, l, (l + r)/2, a, b); T tb = get(2*id + 1, (l + r)/2 + 1, r, a, b); T t; t.ans[0] = 1; for (int k = 1; k <= 4; k++) { lint sum = 0; for (int kk = 0; kk <= k; kk++) { sum = (sum + ta.ans[kk]*tb.ans[k-kk]) % p; } t.ans[k] = sum; } return t; } } int main() { int n, m; scanf("%d %d %d", &n, &m, &p); if (n > 80000) { printf("Limites errados!\n"); return 0; } for (int i = 1; i <= n; i++) { int val; scanf("%d", &val); update(1, 1, n, i, val); } for (int i = 0; i < m; i++) { char c; scanf(" %c", &c); if (c == 'I') { int id, delta; scanf("%d %d", &id, &delta); update(1, 1, n, id, delta); } else { int a, b, k; scanf("%d %d %d", &a, &b, &k); T t = get(1, 1, n, a, b); for (int i = 0; i <= k; i++) { if (i > 0) printf(" "); printf("%d", (int) (t.ans[i] % p)); } printf("\n"); } } return 0; }
#include <cstdio> #include <algorithm> #include <utility> using namespace std; const int MAX_N = 1005; int n; pair < int, int > val[MAX_N]; int memo[MAX_N][MAX_N]; pair < int, int > best[MAX_N][MAX_N]; int go[MAX_N]; int solve(int a, int b) { if (a == n-1 && b == n-1) return 0; if (a == n-1) { best[a][b] = make_pair(n-1, n-1); return val[b].first*(1000/val[n-1].first); } if (b == n-1) { best[a][b] = make_pair(n-1, n-1); return val[n - 1].first*(1000/val[a].first); } int &ans = memo[a][b]; if (ans != -1) return ans; int curr = max(a, b) + 1; int ans1 = val[curr].first*(1000/val[a].first) + solve(curr, b); int ans2 = val[b].first*(1000/val[curr].first) + solve(a, curr); if (ans1 < ans2) { ans = ans1; best[a][b] = make_pair(curr, b); } else { ans = ans2; best[a][b] = make_pair(a, curr); } return ans; } int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { int x; scanf("%d", &x); val[i] = make_pair(x, i); } for (int i = 0; i <= n; i++) for (int j = 0; j <= n; j++) memo[i][j] = -1; sort(val, val + n); solve(0, 0); int a = 0, b = 0; while (a != n - 1 || b != n - 1) { int aa = best[a][b].first; int bb = best[a][b].second; if (aa != a) go[val[a].second] = val[aa].second; else go[val[bb].second] = val[b].second; a = aa, b = bb; } int curr = 0; do { if (curr != 0) printf(" "); printf("%d", curr + 1); curr = go[curr]; } while (curr != 0); printf("\n"); return 0; }
#include <cstdio> #include <string> using namespace std; typedef long long lint; const lint MOD = 1000000007; const int MAX_N = 100020; string s[3]; char buffer[MAX_N]; lint fat[MAX_N]; lint mpow(lint a, lint b) { if (b == 0) return 1; if (b == 1) return a % MOD; if (b == 2) return (a*a) % MOD; lint ans = 1; if (b & 1) ans = a % MOD; lint mp = mpow(a, b/2); return (ans*((mp*mp)%MOD)) % MOD; } lint choose(lint a, lint b) { if (a < 0 || b < 0) return 0; if (b > a) return 0; if (b == 0) return 1; lint up = fat[a]; lint down1 = mpow(fat[b], MOD - 2); lint down2 = mpow(fat[a - b], MOD - 2); lint down = (down1 * down2) % MOD; lint ans = (up * down) % MOD; return ans; } int main() { fat[0] = 1; for (int i = 1; i < MAX_N; i++) fat[i] = (i * fat[i - 1]) % MOD; int n; for (int i = 0; i < 3; i++) { scanf("%s", buffer); s[i] = buffer; } n = s[0].size(); int ta = 0, tb = 0, tc = 0; lint mult = 1; for (int i = 0; i < n; i++) { if (s[0][i] == s[1][i] && s[0][i] == s[2][i]) mult = (mult * 2LL) % MOD; if (s[0][i] != s[1][i] && s[0][i] != s[2][i]) ta++; if (s[1][i] != s[0][i] && s[1][i] != s[2][i]) tb++; if (s[2][i] != s[0][i] && s[2][i] != s[1][i]) tc++; } lint ans = 0; for (int c = 0; c <= tc; c++) { int a2 = ta - tc + 2*c; int b2 = tb - tc + 2*c; if (a2&1 || b2&1) continue; int a = a2/2; int b = b2/2; lint ways = choose(tc, c); ways = (ways * choose(tb, b)) % MOD; ways = (ways * choose(ta, a)) % MOD; ans = (ans + ways) % MOD; } printf("%lld\n", (ans*mult)%MOD); return 0; }
#include <cstdio> #include <algorithm> #define abs(x) ((x) < 0 ? (-(x)) : (x)) using namespace std; const int MAX_N = 404; int pos[MAX_N]; int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &pos[i]); double ans = 10000000000.0, best = 0; int c = 0; for (int chosen = 0; chosen < n; chosen++) { double a = 1, b = 20000; while (b - a > 1e-9) { double x = (2*a + b) / 3.0; double y = (a + 2*b) / 3.0; double dx = 0, dy = 0; for (int i = 0; i < n; i++) { double pi = (double) pos[i]; double pc = (double) pos[chosen]; double prx = pc + (double) (i - chosen) * x; double pry = pc + (double) (i - chosen) * y; dx += abs(pi - prx); dy += abs(pi - pry); } //printf("x %lf dx %lf y %lf dy %lf chosen %d\n", x, dx, y, dy, chosen); if (dx < ans) { ans = dx; best = x; c = chosen; } if (dy < ans) { ans = dy; best = y; c = chosen; } if (dy - dx > 1e-9) { b = y; //printf("voltou\n"); } else { a = x; //printf("avancou\n"); } } } printf("%.4lf\n", ans); for (int i = 0; i < n; i++) { if (i > 0) printf(" "); printf("%.7lf ", (double) pos[c] + (double) (i - c)*best); } printf("\n"); return 0; }