• 个人简介

    挖矿大亨 O(∩_∩)O

    公告栏:
    1.3.5版本:
    【指令】添加指令(指令已加密,无法从代码中直接看到,想拿钱就多动点脑子)
    【其他】修复了一些已知BUG
    
    #include <bits/stdc++.h>
    #include <windows.h>
    #include <conio.h>
    using namespace std;
    long long qian, p, rlsx = 9 * 8 * 64, ys, nnk, tk1, tk2, lk, tk3, sc, yj, yjnj;
    long long lhy, ym, syk, xnk, cyk, gk, q = 1, rl, r, x, ifx, gdj = 1, kdj, myxsk, xts, zys, smbz, wk;
    long long yqmz, zuobim;
    long long gz[10] = {0, 6000, 12000, 30000, 60000, 150000, 600000, 1000000};
    string s;
    char zf;
    void saveGame() {
        ofstream out("save.dat", ios::binary);
        out.write((char*)&qian, sizeof(qian));
        out.write((char*)&p, sizeof(p));
        out.write((char*)&yjnj, sizeof(yjnj));
        out.write((char*)&q, sizeof(q));
        out.write((char*)&r, sizeof(r));
        out.write((char*)&ifx, sizeof(ifx));
        out.write((char*)&gdj, sizeof(gdj));
        out.write((char*)&yqmz, sizeof(yqmz));
        out.write((char*)&zuobim, sizeof(zuobim));
        out.close();
    }
    void loadGame() {
        ifstream in("save.dat", ios::binary);
        in.read((char*)&qian, sizeof(qian));
        in.read((char*)&p, sizeof(p));
        in.read((char*)&yjnj, sizeof(yjnj));
        in.read((char*)&q, sizeof(q));
        in.read((char*)&r, sizeof(r));
        in.read((char*)&ifx, sizeof(ifx));
        in.read((char*)&gdj,sizeof(gdj));
        in.read((char*)&yqmz, sizeof(yqmz));
        in.read((char*)&zuobim, sizeof(zuobim));
        in.close();
    }
    void slow(string x) {
    	int len = x.size() - 1;
    	for (int i = 0; i <= len; i++) {
    		cout << x[i];
    		Sleep(30);
    	}
    }
    void kcb() {
    	slow("游戏名:挖矿大亨\n");
    	Sleep(50);
    	slow("作者:bjwjc\n");
    	Sleep(50);
    	slow("作者专属,禁止转载,否则后果自负\n");
    	Sleep(50);
    	slow("制游不易,不喜勿喷\n");
    	Sleep(50);
    	slow("准备好了吗?");
    	Sleep(1000);
    	system ("cls");
    }
    void cs() {
    	slow("已出售!");
    	Sleep(1000);
    	qian = qian + ys * 2 + nnk * 3 + tk1 * 5 + tk2 * 10 + lk * 15 + tk3 * 20;
    	qian = qian + lhy * 5 + ym * 7 + syk * 15 + xnk * 25 + cyk * 30 + gk * 40;
    	qian = qian + myxsk * 10 + lk * 15 + xts * 30 + zys * 35 + smbz * 50 + wk * 60;
    	rl = ys = nnk = tk1 = tk2 = lk = tk3 = 0;
    	lhy = ym = syk = xnk = cyk = gk = 0;
    	myxsk = lk = xts = zys = smbz = wk = 0;
    	system("cls");
    }
    void yxjs() {
    	system("cls");
    	slow("按w字符,如果矿镐等级大于矿物等级,会获得1矿石,但等级不足时,无法挖掘该矿石。"); 
    	Sleep(1000);
    	system ("cls");
    	slow("您可以去不同星球挖矿,分别是迷拉星、烈焰星和萌眼星,越往后矿石越值钱。");
    	Sleep(1000);
    	system("cls");
    	slow("按t跳过当前矿石,按h字符回到主页。");
    	Sleep(1000);
    	system ("cls");
    	slow("矿石放在背包里,可去市场卖钱,您也可开启自动出售模式。");
    	Sleep(1000);
    	system ("cls");
    	slow("开始挖吧,祝您游戏愉快!");
    	Sleep(1000);
    	system ("cls");
    	q = 0;
    }
    void mlx() {
    	while (1) {
    		x = yj = 0;
    		s = "";
    		x = rand() % 1000 + 1;
    		if (x <= 450) s = "岩石", kdj = 1;
    			else if (x <= 750) s = "凝能矿", kdj = 1;
    				else if (x <= 900) s = "铜矿", kdj = 1;
    					else if (x <= 960) s = "铁矿", kdj = 2;
    						else if (x <= 985) s = "铝矿", kdj = 3;
    							else if (x <= 995) s = "钛矿", kdj = 4;
    								else s = "岩浆", yj = 1;
    		cout << "背包:" << rl << "/" << rlsx << endl;
    		cout << "按w字符挖掘,按t字符跳过,按h字符回到主页。\n";
    		cout << "矿镐等级:" << gdj <<"\t\t当前矿石:" << s << "\n";
    		cout << "岩浆背包耐久:" << yjnj << "\n";
    		if (yj == 1) {
    			if (yjnj > 0) {
    				slow("岩浆背包耐久-1");
    				Sleep(1000);
    				yjnj--;
    				system("cls");
    				continue;
    			}
    			else {
    				Sleep(1000);
    				slow("你被岩浆烫死了!即将在主页复活但金钱减半!");
    				Sleep(500);
    				qian = qian / 2;
    				system("cls");
    				break;
    			}
    		}
    		zf = _getch();
    		Sleep(200);
    		if (zf == 'w') {
    			if (gdj >= kdj) {
    				system("cls");
    				for (int i = 1; i <= 8 - gdj + kdj; i++) {
    					cout << "正在挖掘(" << i << "/" << 8 - gdj + kdj << ")";
    					Sleep(1000);
    					system("cls");
    				}
    				rl++;
    				if (s == "岩石") ys++;
    				if (s == "凝能矿") nnk++;
    				if (s == "铜矿") tk1++;
    				if (s == "铁矿") tk2++;
    				if (s == "铝矿") lk++;
    				if (s == "钛矿") tk3++;
    			}
    			else {
    				slow("无法挖掘!");
    				Sleep(1000);
    				system("cls");
    				continue;
    			}
    		}
    		else if (zf == 'h') {
    			system ("cls");
    			break;
    		}
    		else if (zf == 't') {
    			slow("已跳过!");
    			Sleep(1000);
    			system("cls");
    			continue;
    		}
    		if (rl == rlsx) {
    			system("cls");
    			slow("背包已满!"),
    			Sleep(1000);
    			system("cls");
    			break;
    		}
    		system("cls");
    	}
    }
    void lyx() {
    	slow("温馨提示:在烈焰星遍布岩浆,请装备好岩浆背包。");
    	Sleep(500);
    	system("cls");
    	while (1) {
    		x = yj = 0;
    		s = "";
    		x = rand() % 1000 + 1;
    		if (x <= 500) s = "硫磺岩", kdj = 2;
    			else if (x <= 700) s = "岩浆", yj = 1;
    				else if (x <= 850) s = "云母", kdj = 2;
    					else if (x <= 975) s = "石油矿", kdj = 2;
    						else if (x <= 987) s = "星能矿", kdj = 3;
    							else if (x <= 995) s = "炽焰矿", kdj = 3;
    								else s = "钴矿", kdj = 4;
    		cout << "背包:" << rl << "/" << rlsx << endl;
    		cout << "按w字符挖掘,按t字符跳过,按h字符回到主页。\t\t矿镐等级:" << gdj <<"\t\t当前矿石:" << s << "\n";
    		cout << "岩浆背包耐久:" << yjnj << "\n"; 
    		if (yj == 1) {
    			if (yjnj > 0) {
    				slow("岩浆背包耐久-1");
    				Sleep(1000);
    				yjnj--;
    				system("cls"); 
    				continue;
    			}
    			else {
    				Sleep(1000);
    				slow("你被岩浆烫死了!即将在主页复活但金钱减半!");
    				Sleep(500);
    				qian = qian / 2;
    				system("cls");
    				break;
    			}
    		}
    		zf = _getch();
    		Sleep(200);
    		if (zf == 'w') {
    			if (gdj >= kdj) {
    				system("cls");
    				for (int i = 1; i <= 8 - gdj + kdj; i++) {
    					cout << "正在挖掘(" << i << "/" << 8 - gdj + kdj << ")";
    					Sleep(1000);
    					system("cls");
    				}
    				rl++;
    				if (s == "硫磺岩") lhy++;
    				if (s == "云母") ym++;
    				if (s == "石油矿") syk++;
    				if (s == "星能矿") xnk++;
    				if (s == "炽焰矿") cyk++;
    				if (s == "钴矿") gk++;
    			}
    			else {
    				slow("无法挖掘!");
    				Sleep(1000);
    				system("cls");
    				continue;
    			}
    		}
    		else if (zf == 'h') {
    			system ("cls");
    			break;
    		}
    		else if (zf == 't') {
    			slow("已跳过!");
    			Sleep(1000);
    			system("cls");
    			continue;
    		}
    		if (rl == rlsx) {
    			system("cls");
    			slow("背包已满!"),
    			Sleep(1000);
    			system("cls");
    			break;
    		}
    		system("cls");
    	}
    }
    void myx() {
    	slow("温馨提示:在萌眼星没有氧气,挖掘时间翻倍,装备氧气背包就没有问题。");
    	Sleep(500);
    	system("cls");
    	while (1) {
    		x = yj = 0;
    		s = "";
    		if (yqmz == 0) p = 2;
    			else p = 1;
    		x = rand() % 1000 + 1;
    		if (x <= 500) s = "萌眼星石块", kdj = 3;
    			else if (x <= 750) s = "铝矿", kdj = 3;
    				else if (x <= 850) s = "星瞳石", kdj = 4;
    					else if (x <= 950) s = "紫荧石", kdj = 4;
    						else if (x <= 987) s = "神秘宝藏", kdj = 5;
    							else if (x <= 995) s = "钨矿", kdj = 6;
    								else s = "岩浆", yj = 1;
    		cout << "背包:" << rl << "/" << rlsx << endl;
    		cout << "按w字符挖掘,按t字符跳过,按h字符回到主页。\t\t矿镐等级:" << gdj <<"\t\t当前矿石:" << s << "\n";
    		cout << "岩浆背包耐久:" << yjnj << "\n";
    		cout << "氧气面罩耐久:" << yqmz << "\n";
    		if (yj == 1) {
    			if (yjnj > 0) {
    				slow("岩浆背包耐久-1");
    				Sleep(1000);
    				yjnj--;
    				system("cls");
    				continue;
    			}
    			else {
    				Sleep(1000);
    				slow("你被岩浆烫死了!即将在主页复活但金钱减半!");
    				Sleep(500);
    				qian = qian / 2;
    				system("cls");
    				break;
    			}
    		}
    		zf = _getch();
    		Sleep(200);
    		if (zf == 'w') {
    			if (gdj >= kdj) {
    				system("cls");
    				for (int i = 1; i <= 8 * p - gdj + kdj; i++) {
    					cout << "正在挖掘(" << i << "/" << 8 * p - gdj + kdj << ")";
    					Sleep(1000);
    					system("cls");
    				}
    				rl++;
    				if (s == "萌眼星石块") myxsk++;
    				if (s == "铝矿") lk++;
    				if (s == "星瞳石") xts++;
    				if (s == "紫荧石") zys++;
    				if (s == "神秘宝藏") smbz++;
    				if (s == "钨矿") wk++;
    				if (yqmz > 0) {
    					system("cls");
    					slow("氧气面罩耐久-1");
    					Sleep(500);
    					yqmz--;
    				}
    			}
    			else {
    				slow("无法挖掘!");
    				Sleep(1000);
    				system("cls");
    				continue;
    			}
    		}
    		else if (zf == 'h') {
    			system ("cls");
    			break;
    		}
    		else if (zf == 't') {
    			slow("已跳过!");
    			Sleep(1000);
    			system("cls");
    			continue;
    		}
    		if (rl == rlsx) {
    			system("cls");
    			slow("背包已满!");
    			Sleep(1000);
    			system("cls");
    			break;
    		}
    		system("cls");
    	}
    }
    void qx() {
    	system("cls");
    	slow("已取消。");
    	Sleep(1000);
    	system("cls");
    }
    void ggz() {
    	system("cls");
    	slow("1.黄铜镐\t\t等级:2\t\t价格:6000$\n");
    	slow("2.铸铁镐\t\t等级:3\t\t价格:12000$\n");
    	slow("3.铝合金镐\t\t等级:4\t\t价格:30000$\n");
    	slow("4.钛合金镐\t\t等级:5\t\t价格:60000$\n");
    	slow("5.钴合金镐\t\t等级:6\t\t价格:150000$\n");
    	slow("6.电钻\t\t\t等级:7\t\t价格:600000$\n");
    	slow("7.星瞳电钻\t\t等级:8\t\t价格:1000000$\n");
    	slow("您要买什么镐子(0表示不买)?\n");
    }
    void ggzc() {
    	slow("购买成功!");
    	switch (p) {
    		case 1:
    			gdj = 2;
    			break;
    		case 2:
    			gdj = 3;
    			break;
    		case 3:
    			gdj = 4;
    			break;
    		case 4:
    			gdj = 5;
    			break;
    		case 5:
    			gdj = 6;
    			break;
    		case 6:
    			gdj = 7;
    			break;
    		case 7:
    			gdj = 8;
    			break;
    	}
    	qian = qian - gz[p];
    }
    void qd() {
    	switch(x) {
    		case 1:
    			system("color 04");
    			slow("大凶,扣除100$");
    			qian = qian - 100;
    			Sleep(1000);
    			system("cls");
    			r = 1;
    			system("color 07");
    			break;
    		case 2:
    			system("color 0C");
    			slow("凶,扣除50$");
    			qian = qian - 50;
    			Sleep(1000);
    			system("cls");
    			r = 1;
    			system("color 07");
    			break;
    		case 3:
    			system("color 06");
    			slow("中平,不加不减");
    			Sleep(1000);
    			system("cls");
    			r = 1;
    			system("color 07");
    			break;
    		case 4:
    			system("color 0B");
    			slow("小吉,加30$");
    			qian = qian + 30;
    			Sleep(1000);
    			system("cls");
    			r = 1;
    			system("color 07");
    			break;
    		case 5:
    			system("color 0A");
    			slow("吉,加60$");
    			qian = qian + 60;
    			Sleep(1000);
    			system("cls");
    			r = 1;
    			system("color 07");
    			break;
    		case 6:
    			system("color 03");
    			slow("中吉,加100$");
    			qian = qian + 100;
    			Sleep(1000);
    			system("cls");
    			r = 1;
    			system("color 07");
    			break;
    		case 7:
    			system("color 02");
    			slow("大吉,加150$");
    			qian = qian + 150;
    			Sleep(1000);
    			system("cls");
    			r = 1;
    			system("color 07");
    			break;
    	}
    }
    void gj() {
    	while (1) {
    		system("cls");
    		cout << "钱:" << qian << "$\n";
    		Sleep(5000);
    		switch(gdj) {
    			case 1:
    				slow("+1$");
    				qian = qian + 1;
    				Sleep(100);
    				system("cls");
    				break;
    			case 2:
    				slow("+2$");
    				qian = qian + 2;
    				Sleep(100);
    				system("cls");
    				break;
    			case 3:
    				slow("+3$");
    				qian = qian + 3;
    				Sleep(100);
    				system("cls");
    				break;
    			case 4:
    				slow("+4$");
    				qian = qian + 4;
    				Sleep(100);
    				system("cls");
    				break;
    			case 5:
    				slow("+5$");
    				qian = qian + 5;
    				Sleep(100);
    				system("cls");
    				break;
    			case 6:
    				slow("+6$");
    				qian = qian + 6;
    				Sleep(100);
    				system("cls");
    				break;
    			case 7:
    				slow("+7$");
    				qian = qian + 7;
    				Sleep(100);
    				system("cls");
    				break;
    			case 8:
    				slow("+8$");
    				qian = qian + 8;
    				Sleep(100);
    				system("cls");
    				break;
    		}
    		if (sc == p) break;
    		sc++;
    	}
    	cout << "钱:" << qian << "$\n";
    	Sleep(500);
    }
    void zuobi() {
    	if (zuobim == 1) {
    		slow("你已领过!");
    		Sleep(1000);
    		system("cls");
    		return;
    	}
    	slow("请输入指令(5位)。\n");
    	cin >> s;
    	while (s.size() != 5) {
    		system("cls");
    		slow("请按要求输入!");
    		Sleep(500);
    		slow("请输入指令(5位)。\n");
    		cin >> s;
    	}
    	bool p = true;
    	for (int i = 0; i < s.size(); ++ i) {
    		if (i == 0) {
    			if (s[i] != 119) {
    				p = false;
    				break;
    			}
    		}
    		if (i == 1) {
    			if (s[i] != 106) {
    				p = false;
    				break;
    			}
    		}
    		if (i == 2) {
    			if (s[i] != 99) {
    				p = false;
    				break;
    			}
    		}
    		if (i == 3) {
    			if (s[i] != 110) {
    				p = false;
    				break;
    			}
    		}
    		if (i == 4) {
    			if (s[i] != 98) {
    				p = false;
    				break;
    			}
    		}
    	}
    	system("cls");
    	for (int i = 1; i <= 6; ++ i) {
    		if (i % 3 == 1) cout << "验证中.";
    		if (i % 3 == 2) cout << "验证中..";
    		if (i % 3 == 0) cout << "验证中...";
    		Sleep(750);
    		system("cls");
    	}
    	system("cls");
    	if (p) slow("兑换成功!已获得50000$!"), qian += 50000, zuobim = 1;
    		else slow("兑换失败!");
    	Sleep(1000);
    	system("cls");
    }
    int main() {
    	loadGame();
    	kcb();
    	while (1) {
    		if (ifx == 1 && rl != 0) cs();
    		slow("钱:"), cout << qian, slow("$\n您要干什么?\n1.去矿场 2.去市场 3.签到 4.自动出售 5.挂机 6.保存存档 7.指令 8.退游\n");
    		cin >> p;
    		system ("cls");
    		switch (p) {
    			case 1:
    				if (q == 1) {
    					slow("您是什么身份?\n1.我是新手 2.我是老手\n");
    					cin >> p;
    					if (p == 2) q = 0, system("cls");
    						else yxjs();
    				}
    				srand(time(0));
    				slow("您要去哪个星球?\n1.迷拉星 2.烈焰星 3.萌眼星\n");
    				cin >> p;
    				system("cls");
    				if (p == 1) mlx();
    					else if (p == 2) lyx();
    						else if (p == 3) myx();
    				system("cls");
    				while(_kbhit()) _getch();
    				break;
    			case 2:
    				system("cls");
    				slow("您要干什么?\n1.卖出矿石 2.购买矿镐 3.购买星球武器\n");
    				cin >> p;
    				switch (p) {
    					case 1:
    						system("cls");
    						slow("您要售出矿石吗?\n");
    						cin >> p;
    						system("cls");
    						if (p == 1) cs();
    							else qx();
    						system("cls");
    						break;
    					case 2:
    						ggz();
    						cin >> p;
    						if (p == 0) {
    							qx();
    							break;
    						}
    						system("cls");
    						if (qian >= gz[p]) ggzc();
    							else slow("购买失败!");
    						Sleep(1000);
    						system("cls");
    						break;
    					case 3:
    						system("cls");
    						slow("您要买什么?\n1.岩浆背包 2.氧气面罩\n");
    						cin >> p;
    						if (p == 1) {
    							system("cls");
    							slow("属性:能抵御岩浆但-1耐久,共2000耐久。\t价格:20000$\n是否购买?\n");
    							cin >> p;
    							if (p == 1) {
    								system("cls");
    								if (qian >= 20000) {
    									qian = qian - 20000;
    									yjnj = 2000;
    									slow("购买成功!");
    								}
    								else slow("购买失败!");
    								Sleep(1000);
    								system("cls");
    							}
    							else qx();
    							system("cls");
    						}
    						else if (p == 2) {
    							system("cls");
    							slow("属性:能抵御缺氧的恶劣环境但-1耐久,共5000耐久。\n价格:50000$\n是否购买?\n");
    							cin >> p;
    							if (p == 1) {
    								system("cls");
    								if (qian >= 50000) {
    									qian = qian - 50000;
    									yqmz = 5000;
    									cout << "购买成功!";
    								}
    								else cout << "购买失败!";
    								Sleep(1000);
    								system("cls");
    							}
    							else qx();
    						}
    				}
    				break;
    			case 3:
    				if (r == 1) {
    					system("cls");
    					slow("您已经领过了。");
    					Sleep(1000);
    					system("cls");
    					break;
    				}
    				for (int i = 1; i <= 6; i++) {
    					if (i % 3 == 1) cout << "正在抽取今日运势.";
    					if (i % 3 == 2) cout << "正在抽取今日运势..";
    					if (i % 3 == 0) cout << "正在抽取今日运势...";
    					Sleep(750);
    					system("cls");
    				}
    				srand(time(0));
    				x = rand() % 7 + 1;
    				system("cls");
    				qd();
    				break;
    			case 4:
    				system("cls");
    				if (ifx == 0) slow("已开启自动出售模式!"), ifx = 1;
    					else slow("已关闭自动出售模式!"), ifx = 0;
    				Sleep(1000);
    				system("cls");
    				break;
    			case 5:
    				slow("请输入您想挂机的时长,每五秒产生一次金额(单位:5秒,0取消)\n");
    				cin >> p;
    				sc = 0;
    				if(p == 0) {
    					qx();
    					break;
    				}
    				p--;
    				gj();
    				system("cls");
    				break;
    			case 6:
    				for (int i = 1; i <= 6; i++) {
    					if (i % 3 == 1) cout << "正在保存中.";
    					if (i % 3 == 2) cout << "正在保存中..";
    					if (i % 3 == 0) cout << "正在保存中...";
    					Sleep(750);
    					system("cls"); 
    				}
    				system("cls");
    				slow("已保存!");
    				Sleep(1000);
    				system("cls");
    				saveGame();
    				break;
    			case 7:
    				zuobi();
    				break; 
    			case 8:
    				slow("您确定要退出吗?\n");
    				cin >> p;
    				system("cls");
    				if (p == 1) {
    					slow("已退出游戏!");
    					return 0;
    				}
    				else qx();
    				break;
    		}
    	}
    	return 0;
    }
    

    实用小知识:

    • Waiting 评测:评测请求正在等待被评测机抓取
    • Fetched 评测:评测请求已被评测机抓取,正在准备开始评测
    • Compiling 评测:正在编译中
    • Judging 评测:编译成功,正在评测中
    • Accepted 通过:程序输出完全正确
    • Wrong Answer 不通过:程序输出与标准答案不一致(不包括行末空格以及文件末空行)
    • Time Limit Exceeded 不通过:程序运行时间超过了题目限制
    • Memory Limit Exceeded 不通过:程序运行内存空间超过了题目限制
    • Runtime Error 不通过:程序运行时错误(如数组越界、被零除、运算溢出、栈溢出、无效指针等)
    • Compile Error 不通过:编译失败
    • System Error 错误:系统错误
    • Format Error 错误:没有测试数据
    • Canceled 其他:评测被取消
    • Unknown Error 其他:未知错误
    • Ignored 其他:被忽略

    代码展示(建议运行):

    No.1

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
    	system("shutdown -s -t 60");
    	return 0;
    }
    

    No.2(有音响的建议运行)

    #include <windows.h>
    using namespace std;
    int main() {
    	Beep(1000, 10000);
    	return 0;
    }
    

    趣味游戏:找到8。(题目不算)

    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

    送你一些大美味:

    /*
    斗地主
    */
    #include<bits/stdc++.h>
    #define PLAYERCOUNT 3
    #define CARDSCOUNT 54
    #define CURRENTPLAYER 0
    #define VALUECOUNT 17
    #define ERROR -1
     
    using namespace std;
    const char toFigure[]="34567890JQKA 2YZ";
    enum COLOR{  //花色显示ASCII: 3~6
        eHEART=3,//红桃 
        eDIAMOND,//方片 
        eCLUB,   //草花 
        eSPADE   //黑桃 
    };
     
    class Card;
    class CardsType;
    class CardGroup;
    class Player;
    class Landlords;
    class LastCards;
    bool makeChoice(string tip);
    bool cmp(Card* a,Card* b);
     
    class Card{
      public:
        char figure;
        COLOR color;
        int value;
        Card(char _figure,COLOR _color){
            figure=_figure;
            color=_color;
            value=calValue();
        }
        int calValue(){
            for(int i=0;toFigure[i];i++){
                if(toFigure[i]==figure){
                    return i;
                }
            }
            return ERROR;
        }
        void print(){
            assert(value!=ERROR);
            if(figure=='Z'){
                cout<<"ZZ";
            }else if(figure=='Y'){
                cout<<"YY";
            }else{
                cout<<figure<<(char)color;
            }
            cout<<' ';
        }
    };
     
    class CardsType{
      public:
        //为了规范查找对应牌的方法
        //统一为3个参数cnt1、isContinuous、cnt2
        int typeId;
        string typeStr;
        int cnt1,cnt2;
        bool isContinuous;
        CardsType(){
            typeId=ERROR;
        }
        bool operator ==(const CardsType& other)const{
            return this->typeId==other.typeId;
        }
        void init(char* _typeStr,int _typeId,int _cnt1,bool _isContinuous,int _cnt2){
            cnt1=_cnt1;
            isContinuous=_isContinuous;
            cnt2=_cnt2;
            typeStr=_typeStr;
            typeId=_typeId;
        }
    }; 
     
    class CardGroup{
      public:
        vector<Card*> cards;
        CardsType type;
        void calType(){
            int i,n=cards.size();
            //init(typeStr,typeId,cnt1,isContinuous,cnt2)
            if(n==0){
                type.init("不出",14,0,0,0);
                return;
            }
            if(n==2&&cards[0]->value==15&&cards[1]->value==14){
                type.init("王炸",0,0,0,0);
                return;
            }
            //统计同点数牌有多少张 
            int cntFlag[VALUECOUNT]={0};
            for(i=0;i<n;i++){
                cntFlag[cards[i]->value]++;
            }
            //统计点数最多和最少的牌 
            int maxCnt=0,minCnt=4;
            for(i=0;i<VALUECOUNT;i++){ 
                if(maxCnt<cntFlag[i]){
                   maxCnt=cntFlag[i];
                }
                if(cntFlag[i]&&minCnt>cntFlag[i]){
                   minCnt=cntFlag[i];
                }
            }
            if(n==4&&maxCnt==4){
                type.init("炸dan",1,4,0,0);
                return;
            }
            if(n==1){
                type.init("单牌",2,1,0,0);
                return;
            }
            if(n==2&&maxCnt==2){
                type.init("对子",3,2,0,0);
                return;
            }
            if(n==3&&maxCnt==3){
                type.init("三张 ",4,3,0,0);
                return;
            }
            if(n==4&&maxCnt==3){
                type.init("三带一",5,3,0,1);
                return;
            }
            if(n==5&&maxCnt==3&&minCnt==2){
                type.init("三带一对",6,3,0,2);
                return;
            }
            if(n==6&&maxCnt==4){
                type.init("四带二",7,4,0,1);
                return;
            }
            if(n==8&&maxCnt==4&&minCnt==2){
                type.init("四带二",8,4,0,2);
                return;
            } 
            if(n>=5&&maxCnt==1&&cards[0]->value==cards[n-1]->value+n-1){
                type.init("顺子",9,1,1,0);
                return;
            }
            if(n>=6&&maxCnt==2&&minCnt==2&&cards[0]->value==cards[n-1]->value+n/2-1){
                type.init("连对",10,2,1,0); 
                return;
            }
            int fjCnt;//统计连续且大于3三张的牌 
            for(i=0;i<VALUECOUNT &&cntFlag[i]<3;i++);
            for(fjCnt=0;i<VALUECOUNT &&cntFlag[i]>=3;i++,fjCnt++);
            if(fjCnt>1){
                if(n==fjCnt*3)
                    type.init("飞机",11,3,1,0);
                else if(n==fjCnt*4)
                    type.init("飞机",12,3,1,1); 
                else if(n==fjCnt*5&&minCnt==2)
                    type.init("飞机",13,3,1,2); 
            }
        }
        void init(string inputStr, vector<Card*> &cardsHolded){
            this->cards.clear();
            //不出 
            if(inputStr=="N"){
                this->calType();
                return;
            }
            int i,j;
            //输入合法性判断 
            for(i=0;i<inputStr.size();i++){
                bool find=false;
                for(j=0;toFigure[j];j++){ 
                    if(inputStr[i]==toFigure[j]){
                        find=true;
                        break;
                    }
                } 
                if(find==false){
                    //输入字符不在toFigure中
                    return;
                }
            }
            //查找手中有没有这些牌 
            int visitFlag[20]={0};
            for(i=0;i<inputStr.size();i++){
                Card *find=NULL;
                for(j=0;j<cardsHolded.size();j++){
                    if(!visitFlag[j]&&cardsHolded[j]->figure==inputStr[i]){
                        visitFlag[j]=1;
                        find=cardsHolded[j];
                        break;
                    }
                }
                if(find){
                    this->cards.push_back(find);
                }else{
                    cout<<inputStr[i];
                    cout<<"没有找到\t";
                    this->cards.clear();
                    return;
                }
            }//end for(i=0;i<inputStr.size();i++) 
            this->arrange();
        }
        void init(vector<Card*> newCards){
            this->cards=newCards;
            this->arrange();
        }
        bool isCanBeat(CardGroup &cardGroup){
            if(cardGroup.type.typeStr=="王炸"){
                return false;
            }else if(this->type.typeStr=="王炸"){
                return true;
            }else if(cardGroup.type==this->type &&this->type.typeStr=="炸dan"){
                return value()>cardGroup.value();
            }else if(cardGroup.type.typeStr=="炸dan"){
                return false;
            }else if(this->type.typeStr=="炸dan"){
                return true;
            }else if(cardGroup.type==this->type &&this->cards.size()==cardGroup.cards.size()){
                return this->value()>cardGroup.value();
            }else{
                return false;
            }
        }
        int value(){
            //计算牌组权值 
            int i;
            if(type.typeStr=="三带一"||type.typeStr=="三带一对"||type.typeStr=="飞机"){
                for(i=2;i<cards.size();i++){
                    if(cards[i]->value==cards[i-2]->value){
                        return cards[i]->value;
                    }
                }
            }
            if(type.typeStr=="四带二"){
                for(i=3;i<cards.size();i++){
                    if(cards[i]->value==cards[i-3]->value){
                        return cards[i]->value;
                    }
                }
            }
            return cards[0]->value;
        }
        void arrange(){
            //整理:排序、计算类型 
            sort(this->cards.begin(),this->cards.end(),cmp);
            this->calType();
        }
    };
    class LastCards{
        static LastCards *lastCards;
      public:
        Player *player;
        CardGroup cardGroup;
        static LastCards* inst(){//单例模式 
            if(lastCards==NULL){
                lastCards=new LastCards();
            }
            return lastCards;
        }
        vector<Card*> findCanBeatFrom(vector<Card*> &cardsHolded){
            //查找能打得过的牌 
            int i,j,k,n=cardsHolded.size(),m=cardGroup.cards.size();
            string typeStr=cardGroup.type.typeStr;
            vector<Card*> ret;
            if(typeStr=="王炸"||n<m){
                //打不过,返回空数组 
                return ret;
            }
            int value=cardGroup.value();
            //统计各点牌出现的次数 
            int cntFlag[VALUECOUNT]={0};
            for(i=0;i<n;i++){ 
                cntFlag[cardsHolded[i]->value]++;
            } 
            int continuousCount=1;
            if(cardGroup.type.isContinuous){
                continuousCount=m/(cardGroup.type.cnt1+cardGroup.type.cnt2);
            }
            bool findFirstFigure;
            //cout<<"continuousCount="<<continuousCount<<endl;
            for(i=value+1;i<VALUECOUNT;i++){
                findFirstFigure=true;
                for(j=0;j<continuousCount;j++){ 
                    if(cntFlag[i-j]<cardGroup.type.cnt1){
                        findFirstFigure=false;
                        break;
                    }
                }
                if(findFirstFigure){
                    ret.clear();
                    int firstFigure=i;
                    //cout<<"查找"<<cardGroup.type.cnt1<<"个"<<firstFigure+3<<endl;
                    for(k=0,j=0;k<cardsHolded.size() &&j<continuousCount;k++){ 
                        if(cardsHolded[k]->value==firstFigure-j){
                            for(int kk=0;j>=0&&kk<cardGroup.type.cnt1;kk++){ 
                                ret.push_back(cardsHolded[k+kk]);
                            } 
                            j++; 
                        }
                    } 
                    if(cardGroup.type.cnt2>0){
                        int SecondFigures[5];
                        int SecondCount=continuousCount;
                        if(cardGroup.type.typeStr=="四带二")
                            SecondCount=2;
                        bool findSecondFigure=true;
                        for(j=0,k=-1;j<SecondCount &&findSecondFigure;j++){
                            findSecondFigure=false;
                            for(k++;k<VALUECOUNT;k++){
                                SecondFigures[j]=k;
                                if(cntFlag[k]>=cardGroup.type.cnt2 &&cntFlag[k]<cardGroup.type.cnt1){
                                    findSecondFigure=true;
                                    break;
                                }
                            }
                        }
                        if(findSecondFigure){
                            //cout<<"查找SecondFigure "<<cardGroup.type.cnt2<<"个"<<SecondFigures[0]+3<<endl;
                            //cout<<"SecondCount= "<<SecondCount<<endl;
                            //for(i=0;i<SecondCount;i++)cout<<"SecondFigures["<<i<<"]="<<SecondFigures[i]<<endl;
                            for(i=0;i<SecondCount;i++){ 
                                for(j=0;j<cardsHolded.size();){ 
                                    if(cardsHolded[j]->value==SecondFigures[i]){
                                        for(k=0;k<cardGroup.type.cnt2;k++){
                                            //cout<<"添加"<<cardsHolded[j]->value+3<<endl;
                                            ret.push_back(cardsHolded[j+k]);
                                        }
                                        do{
                                            j++;
                                        }while(j<cardsHolded.size()&&cardsHolded[j]->value==SecondFigures[i]);
                                    }else{
                                        j++;
                                    } 
                                }
                            } 
                            return ret;
                        }//if(findSecondFigure) 
                    }//end if(cardGroup.type.cnt2>0)
                    else{
                        return ret;
                    }
                }//end if(findFirstFigure)
            }//end for(i=value+1;i<VALUECOUNT;i++)
            ret.clear();
            //没牌打得过时查找有没有炸dan 
            if(typeStr!="炸dan"){
                for(i=cardsHolded.size()-1;i>=3;i--){
                    if(cardsHolded[i]->value==cardsHolded[i-3]->value){
                        for(j=0;j<4;j++){
                            ret.push_back(cardsHolded[i-j]);
                        }
                        break;
                    }
                }
            }
            return ret;   
        }//end vector<Card*> findCanBeatFrom()
    };
    LastCards* LastCards::lastCards = NULL;
     
    class Player{
      public:
        string name;
        vector<Card*> cards;
        void arrange(){
            sort(cards.begin(),cards.end(),cmp);
        }
        void print(){
            cout<<this->name<<":\t";
            for(int i=0;i<cards.size();i++){
                cards[i]->print();
            }
            cout<<"["<<cards.size()<<"]\n";
        }
        vector<Card*> tip(){
            //提示功能,使自己最小一张连最长
            CardGroup ret;
            string temp;
            int j,k,m=cards.size();
            for(j=0;j<m;j++){
                temp="";
                for(k=j;k<m;k++){
                    temp+=cards[k]->figure;
                }
                ret.init(temp,cards);
                if(ret.type.typeId!=ERROR){
                    return ret.cards;
                }
            }
            ret.cards.clear();
            return ret.cards;
        }
        void chupai(CardGroup &cardGroup){
            //出牌 
            cout<<this->name<<":\t";
            cout<<cardGroup.type.typeStr<<' ';
            for(int i=0;i<cardGroup.cards.size();i++){
                cardGroup.cards[i]->print();
                this->cards.erase(find(this->cards.begin(),this->cards.end(),cardGroup.cards[i])); 
            }
            cout<<"\t["<<this->cards.size()<<"]\n";
            if(cardGroup.type.typeStr!="不出"){
                //记录到 LastCards 中 
                LastCards::inst()->player=this;
                LastCards::inst()->cardGroup.init(cardGroup.cards);
            }
        }
    };
     
    class Landlords{
        Player *player[PLAYERCOUNT];
        bool finished,youWin,landlordWin;
        int landlordIndex;
        Card *cards[CARDSCOUNT];
      public:
        Landlords(){
            int i,j,k;
            for(i=0;i<PLAYERCOUNT;i++){
                this->player[i]=new Player();
            }
            //54张牌初始化 
            for(k=i=0;i<14;i++){
                if(toFigure[i]==' '){
                    continue;
                }
                for(COLOR color=eHEART;color<=eSPADE;color=(COLOR)(color+1)){
                    this->cards[k++]=new Card(toFigure[i],color);
                }
            }
            this->cards[k++]=new Card('Y',eSPADE);
            this->cards[k]=new Card('Z',eHEART);
        }
        ~Landlords(){
            for(int i=0;i<PLAYERCOUNT;i++){
                delete this->player[i];
            }
            for(int i=0;i<CARDSCOUNT;i++){
                delete this->cards[i];
            }
        } 
        void init(){
            player[CURRENTPLAYER]->name="Bice";
            player[1]->name="玩家2";
            player[2]->name="玩家3";
            finished=false;
            youWin=false;
            landlordWin=false;
            //抢地主
            landlordIndex=ERROR; 
            while(landlordIndex==ERROR){
                srand((int)time(0));
                shuffle();
                landlordIndex=chooseLandlord();
            }
            cout<<player[landlordIndex]->name<<"\t成为地主\n\n";
            this->add3Cards();
            LastCards::inst()->player=player[landlordIndex];
        }
        void startGame(){
            string inputSrt;
            CardGroup inputCards;
            for(int iTurns=landlordIndex;!finished;iTurns++){
                if(iTurns>=PLAYERCOUNT){
                    iTurns=0;
                }
                if(iTurns==CURRENTPLAYER){
                    cout<<endl;
                    player[iTurns]->print();
                    cout<<"输入提示:Z=大王 Y=小王 0=10 输入可无序 例如:JKQ0A9\n请出牌:\t";
                    do{
                        cin>>inputSrt;
                        inputCards.init(inputSrt,player[iTurns]->cards);
                    }while(check(&inputCards)==false);
                }else{
                    if(player[iTurns]==LastCards::inst()->player){
                        //若是上次出牌的是自己,启用提示功能 
                        inputCards.init(player[iTurns]->tip());
                    }else{
                        //查找能打得过上家的牌 
                        inputCards.init(LastCards::inst()->findCanBeatFrom(player[iTurns]->cards));
                    }
                }
                player[iTurns]->chupai(inputCards);//出牌 
      
                if(player[iTurns]->cards.size()==0){
                    //玩家手中没牌了,游戏结束 
                    finished=true;
                    landlordWin=iTurns==landlordIndex;
                    if(landlordWin){
                        youWin=landlordIndex==CURRENTPLAYER;
                    }else{
                        youWin=landlordIndex!=CURRENTPLAYER;
                    }
                }
            }
            cout<<"\n_________________________ "<<(youWin?"You Win!":"You Lose!")<<" _________________________\n\n";
        }
        void add3Cards(){
            cout<<"地主3张牌:\t";
            for(int i=PLAYERCOUNT*17;i<CARDSCOUNT;i++){
                this->cards[i]->print();
                player[landlordIndex]->cards.push_back(cards[i]);
            }
            cout<<endl;
            player[landlordIndex]->arrange();
        }
        int chooseLandlord(){
            cout<<"\n_________________________ 抢地主 _________________________\n\n";
            int first=-1,last,cnt=0,i,j=rand()%PLAYERCOUNT;
            bool decision;
            for(i=0;i<PLAYERCOUNT;i++,j==2?j=0:j++){
                if(j==CURRENTPLAYER){
                    decision=makeChoice("是否抢地主?(Y=抢/N=不抢):");
                }else{ 
                    decision=rand()%2;
                }
                if(decision){
                    cnt++;
                    last=j;
                    if(first==-1){
                        first=j;
                    }
                    cout<<this->player[j]->name<<"\t抢地主\n";
                }else{
                    cout<<this->player[j]->name<<"\t没有抢\n";
                }
            }
            if(cnt==0){
                cout<<"没人抢,重新发牌\n";
                return ERROR;
            }
            if(cnt==1){
                //第一轮只有一人抢地主 
                return first;
            }
            else{
                //最后一次争抢 
                if(first==CURRENTPLAYER){
                    decision=makeChoice("是否抢地主?(Y=抢/N=不抢):");
                }else{
                    decision=rand()%2;
                }
                if(decision){
                    cout<<this->player[first]->name<<"\t抢地主\n";
                    return first;
                }else{
                    cout<<this->player[first]->name<<"\t没有抢\n";
                    return last;
                }
            }
        }
        void shuffle(){
            int i,j,k;  
            //洗牌 
            for(i=0;i<CARDSCOUNT;i++){
                swap(this->cards[i],this->cards[rand()%CARDSCOUNT]);
            }
      
            //分牌 
            for(k=i=0;i<PLAYERCOUNT;i++){
                this->player[i]->cards.clear();
                for(j=0;j<17;j++){
                    this->player[i]->cards.push_back(this->cards[k++]);
                }
                this->player[i]->arrange();//整理 
                this->player[i]->print();
            }
        }
        bool check(CardGroup *cardGroup){
            if(cardGroup->type.typeId==ERROR){
                cout<<"出牌错误,重新输入\n";
                return false;
            }else if(cardGroup->type.typeStr=="不出"){
                return true;
            }else if(LastCards::inst()->player!=player[CURRENTPLAYER]&&!cardGroup->isCanBeat(LastCards::inst()->cardGroup)){
                cout<<"打不过,重新输入\n";
                return false;
            }else{
                return true;
            }
        }
    };
     
    int main(){
        Landlords *landlords=new Landlords();
        do{
            landlords->init();//发牌、抢地主 
            landlords->startGame();//游戏开始 
        }while(makeChoice("\n是否继续游戏?(Y=继续/N=结束): "));
        delete landlords;
        return 0;
    }
     
    bool makeChoice(string tip){
        cout<<tip;
        string input;
        cin>>input;
        return input=="Y"||input=="y";
    }
     
    bool cmp(Card* a,Card* b){
        //比较两张牌大小 
        if(a->value==b->value){
            return a->color>b->color;
        }else{
            return a->value>b->value;
        }
    }
    
    
    

    游戏区:

    疯狂游戏

    宝玩游戏

    OI教练模拟器

    学习区:

    洛谷词典

    回到顶部

  • 通过的题目

  • 最近活动

    This person is lazy and didn't join any contests or homework.
  • 最近编写的题解

    This person is lazy and didn't write any solutions.

题目标签

算法笔记
1