PAT甲级--1016 Phone Bills (25 分)

阅读 63

2022-03-23

题目详情 - 1016 Phone Bills (25 分) (pintia.cn)

 

代码:

#include<bits/stdc++.h>
using namespace std;
struct Node {
	string name, statue;
	int month, day, hour, mintue, time;
};
bool cmp(Node a, Node b) {
	return a.name != b.name ? a.name < b.name : a.time < b.time;
}
double Price(Node a, vector<double> rate){
	double sum = rate[a.hour] * (double)a.mintue + rate[24] * (double)a.day * 60;
	for (int i = 0; i < a.hour; ++i) {sum += rate[i] * 60;}
	return sum / 100.0;
}
int main()
{
	vector<double> rate(25);
	for (int i = 0; i < 24; ++i) {
		cin >> rate[i];
		rate[24] += rate[i];
	}
	int N = 0;
	char c;
	cin >> N;
	vector<Node> record(N);
	for (int i = 0; i < N; ++i) {
		cin >> record[i].name >> record[i].month >> c >> record[i].day >> c >> record[i].hour >> c >> record[i].mintue >> record[i].statue;
		record[i].time = record[i].day * 24 * 60 + record[i].hour * 60 + record[i].mintue;
	}
	sort(record.begin(), record.end(), cmp);
	map<string, vector<Node>> bill;
	for (int i = 1; i < N; ++i) {
		if (record[i].name == record[i - 1].name && record[i].statue == "off-line" && record[i-1].statue == "on-line") {
			bill[record[i-1].name].push_back(record[i-1]);
			bill[record[i].name].push_back(record[i]);
		}
	}
	for (auto it : bill) {
		vector<Node> temp = it.second;
		cout << it.first;
		printf(" %02d\n", temp[0].month);
		double sum = 0;
		for (int i = 1; i < temp.size(); i += 2) {
			double price = Price(temp[i], rate) - Price(temp[i - 1], rate);
			printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2lf\n", temp[i-1].day, temp[i-1].hour, temp[i-1].mintue, temp[i].day, temp[i].hour, temp[i].mintue, temp[i].time-temp[i-1].time, price);
			sum += price;
		}
		printf("Total amount: $%.2lf\n", sum);
	}
	return 0;
}

 

精彩评论(0)

0 0 举报