📄 1625.cpp
字号:
/* This Code is Submitted by wywcgs for Problem 1625 on 2005-11-22 at 15:52:50 */
#include <cstdio>
#include <cmath>
#include <cctype>
const int MAX = 32;
const int L_MAX = 1024;
const double eps = 1e-5;
class Vector {
private:
static bool isSpace(char);
static void skipSpace(char*&);
public:
double coe[MAX];
double r;
void operator =(const Vector&);
Vector operator *(double);
void operator +=(const Vector&);
void init();
void parse(char*&);
};
bool Vector::isSpace(char c) {
if(isalpha(c)) {
return false;
} else if(isdigit(c)) {
return false;
} else if(c == '(' || c == ')' || c == '-') {
return false;
} else {
return true;
}
}
void Vector::skipSpace(char* &p) {
while(isSpace(p[0])) {
p++;
}
}
void Vector::operator =(const Vector& v) {
int i;
for(i = 0; i < MAX; i++) {
coe[i] = v.coe[i];
}
r = v.r;
}
Vector Vector::operator *(double c) {
Vector v;
int i;
for(i = 0; i < MAX; i++) {
v.coe[i] = coe[i] * c;
}
v.r = r * c;
return v;
}
void Vector::operator +=(const Vector& v) {
int i;
for(i = 0; i < MAX; i++) {
coe[i] += v.coe[i];
}
r += v.r;
}
void Vector::init() {
int i;
for(i = 0; i < MAX; i++) {
coe[i] = 0.0;
}
r = 0.0;
}
void Vector::parse(char* &p) {
int n, i;
Vector node[MAX];
skipSpace(p);
p++;
for(n = 0; ; n++) {
skipSpace(p);
if(p[0] == ')') {
p++;
break;
} else {
node[n].init();
if(isalpha(p[0])) {
node[n].coe[p[0]-'a'] = -1.0;
p++;
} else if(isdigit(p[0]) || p[0] == '-') {
sscanf(p, "%lf", &node[n].r);
while(isdigit(p[0]) || p[0] == '-') {
p++;
}
} else {
node[n].parse(p);
}
}
}
for(i = 0; i < n; i++) {
*this += node[i] * ((double)1/n);
}
}
int main()
{
char line[L_MAX], *p;
int n, m;
int t = 0, i, j;
Vector var[MAX];
while(scanf("%d", &n) == 1) {
if(n == 0) {
return 0;
} else {
getchar();
for(i = 0; i < n; i++) {
gets(line);
m = line[0] - 'a';
var[m].init();
var[m].coe[m] = 1.0;
p = line + 1;
var[m].parse(p);
}
for(i = 0; i < n; i++) {
if(fabs(var[i].coe[i]) > eps) {
var[i] = var[i] * (1/var[i].coe[i]);
for(j = 0; j < n; j++) {
if(i != j) {
var[j] += var[i] * (-var[j].coe[i]);
}
}
}
}
t++;
printf("Game %d\n", t);
for(i = 0; i < n; i++) {
printf("Expected score for %c ", i+'a');
if(fabs(var[i].coe[i]) < eps) {
printf("undefined");
} else {
bool undef = false;
for(j = 0; j < n; j++) {
if(j != i && fabs(var[i].coe[j]) > eps) {
undef = true;
break;
}
}
if(undef) {
printf("undefined");
} else {
printf("= %.3lf", var[i].r);
}
}
putchar('\n');
}
putchar('\n');
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -