All pastes #33116 Raw Edit

Unnamed

public cpp v1 · immutable
#33116 ·published 2005-12-09 19:37 UTC
rendered paste body
#include <iostream>#include <fstream>#include <algorithm>#include <string>#include <list>#include <vector>#include <sstream>using namespace std;//ifstream cin("input.txt", ios::in);//ofstream cout("output.txt", ios::out);string getline(istream &input) {	string temp;	getline(input,temp);	return temp;}class record {	private:		string mylicense;		int mymonth;		int mytime;		int mytype;		int mylocation;		void stot (string thetime) { //string to time			mymonth=(thetime[0]-'0')*10+(thetime[1]-'0');			int myday=(thetime[3]-'0')*10+(thetime[4]-'0');			int myhour=(thetime[6]-'0')*10+(thetime[7]-'0');			int myminute=(thetime[9]-'0')*10+(thetime[10]-'0');			mytime=(myday*60*24)+(myhour*60)+myminute;		}	public:		record () {			mylicense="";			mymonth=0;			mytime=0;			mytype=-1;			mylocation=0;		}				record (string thelicense, string thetime, string thetype, string thelocation) {			mylicense=thelicense;			stot(thetime);			if (thetype=="enter")				mytype=1;			else				mytype=0;			mylocation=0;			for (int i=0;(thelocation[i]>='0') && (thelocation[i]<='9');i++)				mylocation=mylocation*10+thelocation[i]-'0';		}		~record () { }		void update (string thelicense, string thetime, string thetype, string thelocation) {			mylicense=thelicense;			stot(thetime);			if (thetype=="enter")				mytype=1;			else				mytype=0;			mylocation=0;			for (int i=0;(thelocation[i]>='0') && (thelocation[i]<='9');i++)				mylocation=mylocation*10+thelocation[i]-'0';		}		string license () { return mylicense; }		int month () { return mymonth; }		int time () { return mytime; }		int type () { return mytype; }		int location () { return mylocation; }		bool operator< (record b) {			if (mymonth<b.month())				return true;			if (mymonth==b.month())				if (mytime < b.time())					return true;			return false;		}};class person {	private:		list<record> myrecords;		string mylicense;	public:		person () {			mylicense="";		}		person (string license) {			mylicense=license;		}		~person () { }		void update (string license) {			mylicense=license;		}		string license () { return mylicense; }		void pushrecord (record newrecord) {			myrecords.push_front(newrecord);		}		int bill (int toll[24]) {			int bill=0;			myrecords.sort();			record enter, exit;			while (!myrecords.empty()) {				while (!myrecords.empty() &&myrecords.front().type()!=1)					myrecords.pop_front();				enter=myrecords.front();				myrecords.pop_front();				if (!myrecords.empty() && myrecords.front().type()==0) {					exit=myrecords.front();					myrecords.pop_front();//						cout << enter.time() << " " << abs(enter.location()-exit.location()) << " " << (enter.time()%1440-enter.time()%60)/60//							 << " " << toll[(enter.time()%1440-enter.time()%60)/60] << endl;						bill+=100+(toll[(enter.time()%1440-enter.time()%60)/60]*						      abs(enter.location()-exit.location()));				}			}			if (bill)				bill+=200;			return bill;		}};int main () {	int toll[24];	int cases, numpeople, i, j, bill;	string input, license, time, type, location;	stringstream iss;	person tempperson;	record temprecord;	bool found;	iss.clear();	iss.str(getline(cin));	iss >> cases;	iss.clear();	iss.str(getline(cin));	for (i=0; i<cases; i++) {		if (i)			cout << endl;		numpeople=0;		vector<person> people;		iss.clear();		iss.str(getline(cin));		for (j=0; j<24; j++)			iss >> toll[j];		iss.clear();		iss.str(getline(cin));		while (!iss.str().empty()) {			iss >> license >> time >> type >> location;			//cout << " " << license << " " << time << " " << type << " " << location << endl;			temprecord.update(license, time, type, location);			found=false;			for (j=0; j<numpeople; j++) {				if (people[j].license()==license) {					people[j].pushrecord(temprecord);					found=true;				}			}			if (!found) {				tempperson.update(license);				vector<person>::iterator tempit=people.begin();				for (j=0; j<numpeople && license>people[j].license(); j++) { tempit++; }				people.insert(tempit,tempperson);				people[j].pushrecord(temprecord);				numpeople++;			}			iss.clear();			iss.str(getline(cin));		}		//cout << numpeople << endl;		for (j=0; j<numpeople; j++) {			bill=people[j].bill(toll);			if (bill!=0) {				if (bill%100<10)					cout << people[j].license() << " $" << bill/100 << ".0" << bill%100 << endl;				else					cout << people[j].license() << " $" << bill/100 << "." << bill%100 << endl;			}		}	}//	cin.close();//	cout.close();	return 0;}