Cricket Match System Design!
#include <bits/stdc++.h>
using namespace std;
#define ll long long
class Player{
	private:
	int runs,balls,sixes,fours,position;
	string id;
	public:
	Player(int runs,int balls,int sixes,int fours,string id,int position) {
		this->runs=runs;
		this->balls=balls;
		this->sixes=sixes;
		this->fours=fours;
		this->id=id;
		this->position=position;
	}
	void setRuns(int Runs) {
		runs+=Runs;
		if(Runs==6) sixes++;
		if(Runs==4) fours++;
	}
	void dotBalls() {
		balls++;
	}
	int getRuns() {
		return runs;
	}
	string getId() {
		return id;
	}
	int getPosition() {
		 return position;
	}
	int getSixes() {
		return sixes;
	}
	int getfours() {
		return fours;
	}
	int getballs() {
		return balls;
	}
};
class Cricket {
	int overs;
	int players;
	public:
	Cricket(int players,int overs) {
		 this->overs=overs;
		 this->players=players;
	}
	void printScorecard(vector<Player> players,int score,int over,int balls,int b1,int b2,int wickets) {
		 for(int i=0; i<players.size(); i++) {
			  Player item = players[i];
			  cout<<item.getId();
			  if(item.getPosition() == b1 || item.getPosition() == b2) {
				  cout<<"* ";
			  }else {
				  cout<<" ";
			  }
			   cout<<item.getRuns()<<" "<<item.getfours()<<" "<<item.getSixes()<<" "
			   <<item.getballs()<<endl;
		 }
		 cout<<"Total: "<<score<<"/"<<wickets<<endl;
		 if(balls==0) {
		 	cout<<"Overs: "<<over<<endl;
		 }else {
		 	cout<<"Overs: "<<over<<"."<<balls<<endl;
		 }
	}
	pair<long,int> innings() {
		queue<Player> team;
		long Score = 0;
		vector<Player> scorecard;
		vector<string> lineup(players);
		for(int i=0; i<players; i++) cin>>lineup[i];
		for(int i=0; i<lineup.size(); i++) {
			  team.push(Player(0,0,0,0,lineup[i],i));
			  scorecard.push_back(Player(0,0,0,0,lineup[i],i));
		}
		Player b1 = team.front();
		team.pop();
		Player b2 = team.front();
		team.pop();
		Player strike = b1;
		int wickets = 0;
		for(int over = 1; over<=overs; over++) {
			  int balls = 6;
			  cout<<"Over: "<<over<<endl;
			  while(balls>0) {
				   string ball;
				   cin>>ball;
	               string run = "0123456";
				   if(run.find(ball)!=string::npos) {
					   ll val = stoi(ball);
					   strike.setRuns(val);
					   strike.dotBalls();
					   Score+=val;
					    if(strike.getId()==b1.getId()) {
							b1 = strike;
							if(val%2) strike = b2;
					    }else {
							b2 = strike;
							if(val%2) strike = b1;
						}
						balls--;
				   }else if(ball=="W") {
						wickets++;
						strike.dotBalls();
						scorecard[strike.getPosition()]=strike;
						if(strike.getId()==b1.getId()) {
							 if(!team.empty()) {
								 b1=team.front();
								 team.pop();
								 strike=b1;
							 }else {
								 scorecard[b2.getPosition()]=b2;
								 printScorecard(scorecard,Score,over,(6-balls)+1,b2.getPosition(),-1,wickets);
								 return {Score,wickets};
							 }
						}else {
							if(!team.empty()) {
								 b2=team.front();
								 team.pop();
								 strike=b2;
							 }else {
								 scorecard[b1.getPosition()]=b1;
								 printScorecard(scorecard,Score,over,(6-balls)+1,b1.getPosition(),-1,wickets);
								 return {Score,wickets};
							 }
						}
						balls--;
				   }else if(ball=="Wd") {
						Score++;
				   }
			  }
			  if(strike.getId()==b1.getId()) {
				  b1 = strike;
				  strike = b2;
			  }else {
				  b2 = strike;
				  strike = b1;
			  }
			  scorecard[b1.getPosition()]=b1;
			  scorecard[b2.getPosition()]=b2;
			  printScorecard(scorecard,Score,over,0,b1.getPosition(),b2.getPosition(),wickets);
		}
		return {Score,wickets};
	}
};


 int main() {
 	int t;
	 cin>>t;
	  while(t--) {
	  	// TESTCASES
	  	int players,overs;
	  	cin>>players>>overs;
		Cricket match(players,overs);
		pair<long,int> team1 = match.innings();
		pair<long,int> team2 = match.innings();
		if(team1.first>team2.first) {
			cout<<"Team 1 won the match by "<<team1.first-team2.first<<" runs!"<<endl;
		}else {
			cout<<"Team 2 won the match by "<<team2.second - players<<" wickets!"<<endl;
		}
      }
 	return 0;
 }
Comments (0)