1026 Table Tennis (30 分)(C语言实现)(PAT)

2023-11-23 17:48

本文主要是介绍1026 Table Tennis (30 分)(C语言实现)(PAT),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目解析

维护两个队列,分别为普通用户的编号序列,i以及VIP用户的编号序列。

#include <stdio.h>
#include <stdlib.h>
#define MaxCustomerNum 10000
#define MaxWindowNum 101
#define EmptyTable -1
#define VIP 1
#define NONVIP 0struct CNodes
{int aTime, pTime, sTime, tag;
}C[MaxCustomerNum];
struct WNodes
{int num, servenum, tag;
}W[MaxWindowNum];
typedef struct QNodes *Queue;
struct QNodes
{int data[MaxCustomerNum];int front, rear;
};
int comp1(const void *a, const void *b)
{return ((const struct CNodes*)a)->aTime > ((const struct CNodes *)b)->aTime? 1 : -1;
}
int comp2(const void *a, const void *b)
{return ((const struct CNodes*)a)->sTime > ((const struct CNodes *)b)->sTime? 1 : -1;
}
void addQ(Queue Q, int X)
{Q->data[Q->rear++] = X;
}
int deleteQ(Queue Q)
{return Q->data[Q->front++];
}
int IsEmpty(Queue Q)
{return Q->front == Q->rear;
}int main()
{int N, hour, min, sec, cnt = 0, t, vipt, temp, time = 8*60*60, p;scanf("%d", &N);Queue Q[2];for(int i=0; i<2; i++ ){Q[i] = (Queue)malloc(sizeof(struct QNodes));Q[i]->front = Q[i]->rear = 0;}
/*结构数组C存储所有客户的到达时间,服务时间,服务持续时间等*/for(int i=0; i<N; i++ ){scanf("%d:%d:%d %d %d", &hour, &min, &sec, &p, &C[i].tag);if(p>120) p = 120;C[i].pTime = p*60;C[i].aTime = (hour*60+min)*60 + sec;C[i].sTime = -1;}/*按照到达时间进行排序*/qsort(C, N, sizeof(struct CNodes), comp1);/*初始化窗口结构数组*/scanf("%d %d", &t, &vipt);for(int i=1; i<=t; i++ ){W[i].num = 0;W[i].servenum = EmptyTable;W[i].tag = NONVIP;}for(int i=0; i<vipt; i++ ){scanf("%d", &temp);W[temp].tag = VIP;}for(; time<21*3600; time++){while(C[cnt].aTime<=time && cnt<N){addQ(Q[C[cnt].tag], cnt);cnt++;}for(int i=1; i<=t; i++ ){if(W[i].servenum!=EmptyTable){if(--C[W[i].servenum].pTime == 0) W[i].servenum = EmptyTable;}}if(IsEmpty(Q[VIP])&&IsEmpty(Q[NONVIP])) continue;for(int i=1; i<=t; i++ ){if(!IsEmpty(Q[VIP]) && W[i].servenum == EmptyTable && W[i].tag){W[i].servenum = deleteQ(Q[VIP]);W[i].num++;C[W[i].servenum].sTime = time;}}if(IsEmpty(Q[VIP])){for(int i=1; i<=t; i++ ){if(IsEmpty(Q[NONVIP])) break;else{if(W[i].servenum == EmptyTable){W[i].servenum = deleteQ(Q[NONVIP]);W[i].num++;C[W[i].servenum].sTime = time;}}}}else{for(int i=1; i<=t; i++ ){if(W[i].servenum == EmptyTable){if(!IsEmpty(Q[VIP]) && !IsEmpty(Q[NONVIP])){if(C[Q[VIP]->data[Q[VIP]->front]].aTime < C[Q[NONVIP]->data[Q[NONVIP]->front]].aTime)W[i].servenum = deleteQ(Q[VIP]);else W[i].servenum = deleteQ(Q[NONVIP]);}else if(!IsEmpty(Q[VIP])) W[i].servenum = deleteQ(Q[VIP]);else if(!IsEmpty(Q[NONVIP])) W[i].servenum = deleteQ(Q[NONVIP]);else break;W[i].num++;C[W[i].servenum].sTime = time;}}}}qsort(C, N, sizeof(struct CNodes), comp2);for(int i=0; i<N; i++ ){if(C[i].sTime!=-1){printf("%02d:%02d:%02d %02d:%02d:%02d %d\n", C[i].aTime/3600, C[i].aTime/60-60*(C[i].aTime/3600), C[i].aTime%60,\C[i].sTime/3600, C[i].sTime/60-60*(C[i].sTime/3600), C[i].sTime%60, (C[i].sTime-C[i].aTime+30)/60);}}for(int i=1; i<t; i++ ) printf("%d ", W[i].num);printf("%d\n", W[t].num);for(int i=0; i<2; i++ ) free(Q[i]);return 0;
}

这篇关于1026 Table Tennis (30 分)(C语言实现)(PAT)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/419661

相关文章

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.