1016. Phone Bills (25)

#include <iostream>
#include <map>
#include <string>
#include <string.h>
#include <vector>
#include <algorithm>

using namespace std;

struct node
{
	int flag, hour, minute, day, time;
};

int cmp(node n1, node n2)
{
	return n1.time < n2.time;
}

int main()
{
	double p[24], dayp = 0;
	int i;

	for(i = 0; i <= 23; i++)
	{
		scanf("%lf", &p[i]);
		dayp += p[i] * 60;
	}

	int n;
	scanf("%d", &n);

	char name[30], flag[10];
	map<string, vector<node>> m;
	int month;
	node nod;

	for(i = 1; i <= n; i++)
	{
		getchar();
		scanf("%s%d:%d:%d:%d%s", name, &month, &nod.day, &nod.hour, &nod.minute, flag);

		if(flag[1] == 'n')
		{
			nod.flag = 1;
		}
		else
		{
			nod.flag = 0;
		}

		nod.time = nod.day * 24 * 3600 + nod.hour * 60 + nod.minute;
		m[name].push_back(nod);
	}

	map<string, vector<node>> ::iterator it;
	vector<node> v;
	int size, first, minutes, j;
	double sum, cur;
	node n1, n2;

	for(it = m.begin(); it != m.end(); it++)
	{
		v = it->second;
		sort(v.begin(), v.end(), cmp);

		size = v.size();
		sum = 0;
		first = 1;

		for(i = 0; i < size; i++)
		{
			if(v[i].flag == 1 && i + 1 < size && v[i + 1].flag == 0)
			{
				if(first == 1)
				{
					first = 0;
					printf("%s %02d\n", (it->first).c_str(), month);
				}

				cur = minutes = 0;

				n1 = v[i];
				n2 = v[i + 1];

				if(n1.day != n2.day)
				{
					minutes += 60 - n1.minute;
					cur += (60 - n1.minute) * p[n1.hour];

					for(j = n1.hour + 1; j <= 23; j++)
					{
						minutes += 60;
						cur += 60 * p[j];
					}

					for(j = n1.day + 1; j <= n2.day - 1; j++)
					{
						minutes += 24 * 60;
						cur += dayp;
					}

					for(j = 0; j <= n2.hour - 1; j++)
					{
						minutes += 60;
						cur += 60 * p[j];
					}

					minutes += n2.minute;
					cur += n2.minute * p[n2.hour];
				}
				else if(n1.hour != n2.hour)
				{
					minutes += 60 - n1.minute;
					cur += (60 - n1.minute) * p[n1.hour];

					for(j = n1.hour + 1; j <= n2.hour - 1; j++)
					{
						minutes += 60;
						cur += 60 * p[j];
					}

					minutes += n2.minute;
					cur += n2.minute * p[n2.hour];
				}
				else
				{
					minutes += n2.minute - n1.minute;
					cur += (n2.minute - n1.minute) * p[n1.hour];
				}

				cur /= 100;
				sum += cur;

				printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2lf\n", n1.day, n1.hour, n1.minute, n2.day, n2.hour, n2.minute, minutes, cur);
			}
		}

		if(first == 0)
		{
			printf("Total amount: $%.2lf\n", sum);
		}
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-23 16:56  王景迁  阅读(0)  评论(0)    收藏  举报

导航