⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1625.cpp

📁 这是哈尔滨工业大学acmOJ的源代码
💻 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 + -