B
#include <algorithm>
#include <complex>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <deque>
#include <set>
#include <sstream>
#include <stack>
#include <vector>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define REP(i, n) for(int i=0; i<(int)n; ++i)
#define FOR(i, c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define ALL(c) (c).begin(),(c).end()
#define each(i, c) FOR(i, c)
typedef long long int lli;
using namespace std;
int main(int argc, char *argv[])
{
int n;
while (cin >> n) {
double p[n];
for (int i = 0; i < n; ++i) {
cin >> p[i];
}
double x = accumulate(p, p + n, 0LL);
printf("%.10lf\n", x / (n * 100.0) * 100.0);
}
return 0;
}
C
#include <algorithm>
#include <complex>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <deque>
#include <set>
#include <sstream>
#include <stack>
#include <vector>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define REP(i, n) for(int i=0; i<(int)n; ++i)
#define FOR(i, c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define ALL(c) (c).begin(),(c).end()
#define each(i, c) FOR(i, c)
typedef long long int lli;
using namespace std;
const string S = "BERLAND";
map<string, int> _name;
map<int, string> rev;
int name(string s)
{
if (_name.count(s)) ; else {
int tmp = _name.size();
_name[s] = tmp;
rev[tmp] = s;
}
return _name[s];
}
const int N = 4;
pair<int, int> g[N][N];
struct T {
int t, w, l;
string name;
T (int _t, int _w, int _l, string n)
: t(_t), w(_w), l(_l), name(n) {}
};
bool operator < (const T &a, const T &b)
{
if (a.t != b.t) return a.t < b.t;
int diffA = a.w - a.l;
int diffB = b.w - b.l;
if (diffA != diffB) return diffA < diffB;
if (a.w != b.w) return a.w < b.w;
return a.name > b.name;
}
bool solve(void)
{
int p[N];
int win[N];
int lose[N];
fill(p, p + N, 0);
fill(win, win + N, 0);
fill(lose, lose + N, 0);
for (int i = 0; i < N; ++i) {
for (int j = i + 1; j < N; ++j) {
if (g[i][j].first == g[i][j].second) {
p[i] += 1;
p[j] += 1;
} else if (g[i][j].first < g[i][j].second) {
p[j] += 3;
} else if (g[i][j].first > g[i][j].second) {
p[i] += 3;
}
}
}
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (i == j) continue;
win[i] += g[i][j].first;
lose[i] += g[i][j].second;
}
}
vector<T> v;
for (int i = 0; i < N; ++i) {
v.push_back(T(p[i], win[i], lose[i], rev[i]));
}
sort(v.begin(), v.end());
reverse(v.begin(), v.end());
return v[0].name == S || v[1].name == S;
}
pair<int, int> better(pair<int, int> a, pair<int, int> b)
{
if (a.first == -1) return b;
int diffA = a.first - a.second;
int diffB = b.first - b.second;
if (diffA != diffB) return diffA < diffB ? a : b;
return a.second < b.second ? a : b;
}
int main(int argc, char *argv[])
{
while (true) {
_name.clear();
rev.clear();
fill(&g[0][0], &g[N - 1][N], make_pair(-1, -1));
for (int i = 0; i < 5; ++i) {
string a, b;
char c;
int n, m;
cin >> a >> b >> n >> c >> m;
g[name(a)][name(b)] = make_pair(n, m);
g[name(b)][name(a)] = make_pair(m, n);
}
if (_name.size() != 4) break;
int i = name(S);
pair<int, int> res = make_pair(-1, -1);
for (int j = 0; j < N; ++j) {
if (i == j) continue;
if (g[i][j].first == -1) {
for (int x = 0; x <= 100; ++x) {
for (int y = 0; y < x; ++y) {
if (x > y) ; else continue;
g[i][j] = make_pair(x, y);
g[j][i] = make_pair(y, x);
if (solve()) res = better(res, make_pair(x, y));
}
}
} else { continue; };
break;
}
if (res.first != -1) cout << res.first << ":" << res.second << endl;
else cout << "IMPOSSIBLE" << endl;
}
return 0;
}
D
#include <algorithm>
#include <complex>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <deque>
#include <set>
#include <sstream>
#include <stack>
#include <vector>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define REP(i, n) for(int i=0; i<(int)n; ++i)
#define FOR(i, c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define ALL(c) (c).begin(),(c).end()
#define each(i, c) FOR(i, c)
typedef long long int lli;
using namespace std;
struct F {
string name;
vector<string> args;
F (string n, vector<string> a) : name(n), args(a) {};
};
bool match(F &a, F &b)
{
if (a.name != b.name) return false;
if (a.args.size() != b.args.size()) return false;
const int size = a.args.size();
for (int i = 0; i < size; ++i) {
if (a.args[i] == "T") continue;
if (a.args[i] != b.args[i]) return false;
}
return true;
}
int main(int argc, char *argv[])
{
int func;
while (cin >> func) {
cin.ignore();
vector<F> fs;
for (int i = 0; i < func; ++i) {
string ret;
string name;
string line;
getline(cin, line);
replace(line.begin(), line.end(), ',', ' ');
replace(line.begin(), line.end(), '(', ' ');
replace(line.begin(), line.end(), ')', ' ');
istringstream iss(line);
iss >> ret;
iss >> name;
vector<string> v;
for (string s; iss >> s; v.push_back(s)) ;
fs.push_back(F(name, v));
}
map<string, string> ts;
int var;
cin >> var;
for (int i = 0; i < var; ++i) {
string type;
string name;
cin >> type >> name;
ts[name] = type;
}
cin.ignore();
int call;
cin >> call;
cin.ignore();
while (call--) {
string name;
string line;
getline(cin, line);
replace(line.begin(), line.end(), ',', ' ');
replace(line.begin(), line.end(), '(', ' ');
replace(line.begin(), line.end(), ')', ' ');
istringstream iss(line);
iss >> name;
vector<string> v;
int cnt = 0;
for (string s; iss >> s; v.push_back(ts[s])) ;
for (int i = 0; i < func; ++i) {
F f(name, v);
cnt += match(fs[i], f);
}
cout << cnt << endl;
}
}
return 0;
}