技术经验分享:HDU1234开门人和关门人

简介: 技术经验分享:HDU1234开门人和关门人

问题链接:HDU1234 开门人和关门人。


问题简述:参见上述链接。


问题分析:这个问题不是很困难,还是可以锻炼人处理输入输出的能力。


解决问题时,做两个排序,就可以找出开门的人和关门的人。程序中时间转换为整数(秒单位),以便比较排序。


程序说明:这里同时给出C和C++的程序。


C和C++的排序库程序不一样,分别是qsort()和sort,参数不同,比较程序形式上也不一样。


一些细节还是需要注意的,C++程序中的比较函数,参数是常量和引用。


另外,在出来格式化输入方面,还是C语言有优势,所以C++程序中使用C语言的代码处理输入。


这两个程序都不是最佳解法,参见以下的链接。


参考链接:HDU1234 开门人和关门人(解法二)。其中的程序一边读入数据一边计算开门人和关门人,省去结构数组。


AC通过的C语言程序如下:


/ HDU1234 开门人和关门人 /


#include


#include


struct node


{


char name【20】;


int starttime;


int endtime;


} record【1000】;


int cmp1(const void a, const void b)


{


struct node x = (struct node ) a;


struct node y = (struct node ) b;


return x->starttime - y->starttime;


}


int cmp2(const void a, const void b)


{


struct node x = (struct node ) a;


struct node y = (struct node ) b;


return y->endtime - x->endtime;


}


int main(void)


{


int n, m, i;


int h, mi, s;


// 读入总天数(测试组//代码效果参考:http://www.lyjsj.net.cn/wx/art_22994.html

数)

scanf("%d", &n);


while(n--) {


// 读入记录数


scanf("%d", &m);


// 读入各个记录


for(i=0; i

scanf("%s %d:%d:%d", record【i】.name, &h, &mi, &s);


record【i】.starttime = s + mi 60 + h 3600;


scanf("%d:%d:%d", &h, &mi, &s);


record【i】.endtime = s + mi 60 + h 3600;


}


// 排序(按开门时间)


qsort(record, m, sizeof(record【0】), cmp1);


// 输//代码效果参考:http://www.lyjsj.net.cn/wz/art_22992.html

出开门人名字

printf("%s ",record【0】.name);


// 排序(按关门时间)


qsort(record, m, sizeof(record【0】), cmp2);


printf("%s\n",record【0】.name);


}


return 0;


}


AC通过的C++语言程序如下:


/ HDU1234 开门人和关门人 /


#include


#include


#include


using namespace std;


struct node


{


char name【20】;


int starttime;


int endtime;


} record【1000】;


bool cmp1(const node& a, const node& b)


{


return a.starttime b.endtime;


}


int main()


{


int n, m;


int h, mi, s;


// 读入总天数(测试组数)


cin ] n;


while(n--) {


// 读入记录数


cin ] m;


// 读入各个记录


for(int i=0; i

scanf("%s %d:%d:%d", record【i】.name, &h, &mi, &s);


record【i】.starttime = s + mi 60 + h 3600;


scanf("%d:%d:%d", &h, &mi, &s);


record【i】.endtime = s + mi //代码效果参考:http://www.lyjsj.net.cn/wz/art_22990.html

60 + h 3600;

}


// 排序(按开门时间)


sort(record, record + m, cmp1);


// 输出开门人名字


cout [ record【0】.name [ " ";


// 排序(按关门时间)


sort(record, record + m, cmp2);


cout [ record【0】.name [ endl;


}


return 0;


}

相关文章
|
存储 JSON 关系型数据库
mysql中find_in_set()函数用法详解及增强函数
总结而言,`FIND_IN_SET()`是MySQL中处理由逗号分隔的字符串列表的一种便捷方法,尤其适用于列表相对较短且不经常更改的场景。然而,对于更为复杂的需要高性能和可扩展性的数据库设计,它可能不是最优选择,应考虑使用更加正规化的数据库结构。
1764 2
mysql中find_in_set()函数用法详解及增强函数
|
12月前
【LeetCode】整数翻转
【LeetCode】整数翻转
59 1
|
XML 前端开发 Java
Spring Boot的Web开发之Thymeleaf模板引擎的解析及使用(Thymeleaf的基础语法以及常用属性)
Spring Boot的Web开发之Thymeleaf模板引擎的解析及使用(Thymeleaf的基础语法以及常用属性)
415 0
|
机器学习/深度学习 数据挖掘 计算机视觉
超越MobileNet V3 | 详解SkipNet+Bias Loss=轻量化模型新的里程碑(二)
超越MobileNet V3 | 详解SkipNet+Bias Loss=轻量化模型新的里程碑(二)
360 0
|
SQL 缓存 监控
聊聊接口性能优化的11个小技巧
聊聊接口性能优化的11个小技巧
聊聊接口性能优化的11个小技巧
|
JavaScript
js基础笔记学习9-常量
js基础笔记学习9-常量
88 0
js基础笔记学习9-常量
|
机器学习/深度学习 自然语言处理
nlp相关2
nlp相关
122 0
|
网络协议 安全 数据库
|
前端开发
前端工作小结76-整理订单的重置逻辑
前端工作小结76-整理订单的重置逻辑
185 0
前端工作小结76-整理订单的重置逻辑