PAT (Advanced Level) 1016 Phone Bills——记录匹配+分段函数

本文介绍了一种异曲同工的数据处理方法,通过按时间顺序匹配在线和离线记录,计算客户通话费用,并展示了如何使用结构体和map进行数据组织。重点在于实现高效的匹配算法和生成详细的账单报告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目传送门

这道题有几个关键点

记录匹配
  • 按时间排序后,每一个on-line记录与同名的最近的off-line记录匹配
    Each on-line record is paired with the chronologically next record for the same customer provided it is an off-line record.
  • 不能匹配的记录,全部视为无效记录
    Any on-line records that are not paired with an off-line record are ignored, as are off-line records not paired with an on-line record.

之前我们似乎见过这样的题目描述方式嘛:异曲同工的记录匹配方法

结果记录

使用结构体记录匹配成功的通话记录
使用map将用户名映射到相应的编号上

struct node2 {
	char name[25];
	int cnt;
	int start[N];
	int end[N];
	int bill[N];
	int tot_bill;
};
node2 ans[N];
话费计算

我的想法是,设置一个信标按照小时移动
在这里插入图片描述

int cal_bill(int s, int t) {
	int ans = 0;
	int a = 0;
	for (int i = 0; ; ++i) {
		a += 60;
		if (a > s && a <= t) {
			ans += (a - s) * toll[i % 24];
			s = a;
		}
		if (a > t) {
			ans += (t - s) * toll[i % 24];
			break;
		}
	}
	return ans;
}
输出细节

输出时要注意补零,空格
话费要从美分转为美元

AC代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<map>
#include<string>
#include<algorithm>
using namespace std;

const int N = 1010;
map<string, int> myMap;
struct node {
	char name[25];
	int time;
	int flag;
};
node call[N];
int n,month;
int toll[30];
struct node2 {
	char name[25];
	int cnt;
	int start[N];
	int end[N];
	int bill[N];
	int tot_bill;
};
node2 ans[N];

int cmp(const node& A, const node& B) {
	return A.time < B.time;
}

int cmp2(const node2& A, const node2& B) {
	return strcmp(A.name, B.name) < 0;
}

int changeToFlag(char *s) {
	if (s[1] == 'n') return 0;
	else return 1;
}

int changeToTime(char* s) {
	int d = (s[3] - '0') * 10 + s[4] - '0';
	int h = (s[6] - '0') * 10 + s[7] - '0';
	int m = (s[9] - '0') * 10 + s[10] - '0';
	return d * 24 * 60 + h * 60 + m;
}

int cal_bill(int s, int t) {
	int ans = 0;
	int a = 0;
	for (int i = 0; ; ++i) {
		a += 60;
		if (a > s && a <= t) {
			ans += (a - s) * toll[i % 24];
			s = a;
		}
		if (a > t) {
			ans += (t - s) * toll[i % 24];
			break;
		}
	}
	return ans;
}

void prt_time(int t) {
	int d = t / (24 * 60);
	int h = (t % (24 * 60)) / 60;
	int m = t % 60;
	printf("%02d:%02d:%02d", d, h, m);
}

int main()
{
	for (int i = 0; i < 24; ++i) scanf("%d",&toll[i]);
	scanf("%d",&n);
	for (int i = 1; i <= n; ++i) {
		char a[25];
		char b[20];
		char c[20];
		scanf("%s%s%s",&a,&b,&c);
		strcpy(call[i].name, a);
		call[i].time = changeToTime(b);
		call[i].flag = changeToFlag(c);
		if (i == 1) month = (b[0] - '0') * 10 + b[1] - '0';
	}
	sort(call + 1, call + 1 + n, cmp);
	int cnt = 0;
	for (int i = 1; i < n; ++i) {
		if (call[i].flag == 0) {
			for (int j = i + 1; j <= n; ++j) {
				if (strcmp(call[i].name, call[j].name) == 0) {
					//只有可能与遇到的第一个有相同name的记录匹配
					if (call[j].flag == 1) {
						if (myMap[call[i].name] == 0) {
							myMap[call[i].name] = ++cnt;
							ans[cnt].cnt = 0;
							strcpy(ans[cnt].name, call[i].name);
						}
						int id = myMap[call[i].name];
						ans[id].cnt++;
						ans[id].start[ans[id].cnt] = call[i].time;
						ans[id].end[ans[id].cnt] = call[j].time;
						ans[id].bill[ans[id].cnt] = cal_bill(call[i].time, call[j].time);
						ans[id].tot_bill += ans[id].bill[ans[id].cnt];
					}
					break;
					//匹配不上
				}
			}
		}
	}
	sort(ans + 1, ans + 1 + cnt, cmp2);
	for (int i = 1; i <= cnt; ++i) {
		printf("%s %02d\n",ans[i].name,month);
		for (int j = 1; j <= ans[i].cnt; ++j) {
			prt_time(ans[i].start[j]);
			printf(" ");
			prt_time(ans[i].end[j]);
			printf(" %d $%0.2lf\n", ans[i].end[j] - ans[i].start[j],(double)ans[i].bill[j]/100.0);
		}
		printf("Total amount: $%0.2lf\n", (double)ans[i].tot_bill / 100);
	}
	return 0;
}
数据集介绍:野生动物与家畜多目标检测数据集 数据集名称:野生动物与家畜多目标检测数据集 数据规模: - 训练集:1,540张图片 - 验证集:377张图片 - 测试集:316张图片 分类类别: Brown-bear(棕熊)、Chicken(鸡)、Fox(狐狸)、Hedgehog(刺猬)、Horse(马)、Mouse(老鼠)、Sheep(绵羊)、Snake(蛇)、Turtle(龟)、Rabbit(兔)及通用object(物体)共11个类别 标注格式: YOLO格式标注,包含归一化坐标与类别索引,支持目标检测模型训练 数据特性: 涵盖航拍与地面视角,包含动物个体及群体场景,适用于复杂环境下的多目标识别 农业智能化管理: 通过检测家畜(鸡/马/绵羊等)数量及活动状态,辅助畜牧场自动化管理 生态监测系统: 支持野生动物(棕熊/狐狸/刺猬等)识别与追踪,用于自然保护区生物多样性研究 智能安防应用: 检测农场周边危险动物(蛇/狐狸),构建入侵预警系统 动物行为研究: 提供多物种共存场景数据,支持动物群体交互行为分析 高实用性标注体系: - 精细标注包含动物完整轮廓的边界框 - 特别区分野生动物与家畜类别,支持跨场景迁移学习 多维度覆盖: - 包含昼间/复杂背景/遮挡场景 - 涵盖陆地常见中小型动物与禽类 - 提供通用object类别适配扩展需求 工程适配性强: - 原生YOLO格式适配主流检测框架(YOLOv5/v7/v8等) - 验证集与测试集比例科学,支持可靠模型评估 生态价值突出: - 同步覆盖濒危物种(龟类)与常见物种 - 支持生物多样性保护与农业生产的双重应用场景
内容概要:本文档详细介绍了Python实现TSO-ELM(金枪鱼群优化算法优化极限学习机)多输入单输出回归预测的项目实例。极限学习机(ELM)作为一种快速训练的前馈神经网络算法,虽然具有训练速度快、计算简单等优点,但也存在局部最优解和参数敏感性的问题。金枪鱼群优化算法(TSO)通过模拟金枪鱼群体觅食行为,具有较强的全局搜索能力。将TSO与ELM结合形成的TSO-ELM模型,可以优化ELM的输入层和隐藏层之间的权重,提高回归预测的准确性。项目包括数据预处理、TSO优化、ELM回归模型训练和预测输出四个主要步骤,并提供了详细的代码示例。; 适合人群:对机器学习、优化算法有一定了解的数据科学家、算法工程师和研究人员,特别是那些希望深入理解智能优化算法在回归预测任务中的应用的人群。; 使用场景及目标:① 提升ELM在多输入单输出回归预测中的性能,特别是在处理非线性问题时的预测精度;② 解决ELM中的局部最优解和参数敏感性问题;③ 优化ELM的隐层权重和偏置值,提高模型的表达能力和预测能力;④ 在金融、气象、能源、医疗、交通等领域提供更准确的预测模型。; 阅读建议:本文档不仅提供了理论解释,还包含详细的代码实现,建议读者在阅读过程中结合代码进行实践,理解TSO-ELM模型的工作原理,并尝试调整参数以优化预测效果。同时,读者应关注TSO算法在高维复杂问题中的应用挑战,思考如何改进优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值