比赛 20120722 评测结果 AWWWWWWWTT
题目名称 杀手游戏 最终得分 10
用户昵称 KZNS 运行时间 2.034 s
代码语言 C++ 内存使用 0.28 MiB
提交时间 2016-02-19 10:01:14
显示代码纯文本
//KZNS
#include <fstream>
#include <string>
using namespace std;
//
ifstream fin ("bang.in");
ofstream fout ("bang.out");
#define tsnc fin>>s;pr[ts].addcard(s);
#define lsnc fin>>s;pr[ls].addcard(s);
#define db if(pr[ts].die()){FFF=1;break;}
#define dc if(FFF)break;
//
class Player {
public:
	short int HP, Bang, Grenade, Ghost, Knife, Miss, Parry;
	Player() {
		HP=4;
		Bang=0;
		Grenade=0;
		Ghost=0;
		Knife=0;
		Miss=0;
		Parry=0;
	}
	bool die() {
		return !HP;
	}
	void addcard(string s) {
		if (s=="Bang")
			Bang++;
		else if (s=="Grenade")
			Grenade++;
		else if (s=="Ghost")
			Ghost++;
		else if (s=="Knife")
			Knife++;
		else if (s=="Parry")
			Parry++;
	}
	bool bang() {
		if (Parry) {
			Parry--;
			return true;
		}
		if (Miss) {
			Miss--;
			return false;
		}
		HP--;
		return false;
	}
	bool grenade() {
		if (Parry) {
			Parry--;
			return true;
		}
		if (Miss) {
			Miss--;
			return false;
		}
		HP--;
		return false;
	}
	void ghost() {
		if (Bang)
			Bang--;
		else
			HP--;
	}
	void knife() {
		HP--;
	}
	void giveup() {
		int ul=0;
		if (Parry>HP) {
			Parry=HP;
			Miss=0;
			Bang=0;
			return;
		}
		else {
			ul=HP-Parry;
		}
		if (Miss>ul) {
			Miss=ul;
			Bang=0;
			return;
		}
		else {
			ul=ul-Miss;
		}
		if (Bang>ul) {
			Bang=ul;
		}
	}
};
//
void wst() {
	string s;
	fin >>s;
	while (s!="===")
		fin >>s;
}
bool playgame() {
	string s;
	fin >>s;
	if (s==".")
		return false;
	Player pr[2];
	int ts=0, ls=1;
	pr[ts].addcard(s);
	tsnc tsnc tsnc 
	lsnc lsnc lsnc lsnc 
	bool FFF=false;
	while (true) {
		tsnc;tsnc;
		//Ghost
		for (int i=0; i<pr[ts].Ghost; i++) {
			pr[ls].ghost();
			db 
		}
		pr[ts].Ghost=0;
		dc 
		//Knife
		for (int i=0; i<pr[ts].Knife; i++) {
			pr[ls].knife();
			db 
		}
		pr[ts].Knife=0;
		dc 
		//Grenade
		for (int i=0; i<pr[ts].Grenade; i++) {
			if (pr[ls].grenade()) {
				lsnc 
			}
			else 
				db;
		}
		pr[ts].Grenade=0;
		dc 
		//Bang
		if (pr[ts].Bang) {
			pr[ts].Bang--;
			if (pr[ls].bang()) {
				lsnc 
			}
			else if (pr[ls].die())
				FFF=true;
		}
		dc 
		//giveup
		pr[ts].giveup();
		ts^=1;
		ls^=1;
	}
	wst();
	if (ts==0)
		fout <<"WIN" <<endl;
	else
		fout <<"LOSE" <<endl;
	return true;
}
//
int main() {
	while (true) {
		if (!playgame())
			return 0;
	}
	return 0;
}
//UBWH